Chúng tôi sẽ bắt đầu với phần giới thiệu về khóa chính trong oracle và sau đó chúng tôi sẽ đi sâu vào các truy vấn khác nhau về nó.
Giới thiệu về Khóa chính
Khóa chính là một cột hoặc tập hợp các cột trong bảng xác định duy nhất một hàng trong bảng.
Thuộc tính của khóa chính
- Bạn không thể có các giá trị trùng lặp trong đó. tức là nó phải là duy nhất trong bảng
- Nó không được rỗng hoặc chứa các chuỗi trống
- Nó sẽ không được thay đổi theo thời gian
- Chúng tôi chỉ có thể có một khóa chính trong bảng
Đề xuất
- Bạn nên sử dụng các giá trị số làm khóa chính vì nó nhanh hơn
- Tất cả các bảng phải có khóa chính
Cách thêm khóa chính trong oracle
Khóa chính có thể được thêm vào khi tạo bảng hoặc có thể được tạo sau khi tạo bảng.
Đầu tiên chúng ta hãy xem cách tạo bảng
Khóa chính khi tạo bảng
Nó có thể được xác định ở cấp cột hoặc cấp bảng. Khóa chính tổng hợp chỉ được xác định ở cấp bảng. Khi oracle tạo khóa chính, nó sẽ tạo chỉ mục duy nhất trên cột đó trong bảng để thực thi các ràng buộc khóa chính.
Đầu tiên chúng ta hãy kiểm tra cấp độ Cột
Column Level SQL> CREATE TABLE DEPT_MASTER ( dept_nr NUMBER PRIMARY KEY, dept_name varchar2(100) NOT NULL, dept_status NUMBER(1,0) NOT NULL, created_at date 2 ); Table created. SQL> desc DEPT_MASTER Name Null? Type DEPT_NR NOT NULL NUMBER DEPT_NAME NOT NULL VARCHAR2(100) DEPT_STATUS NOT NULL NUMBER(1) CREATED_AT DATE SQL> select index_name from dba_indexes where table_name='DEPT_MASTER'; INDEX_NAME ********** SYS_C0013850522 SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER'; CONSTRAINT_NAME INDEX_NAME CONSTRAINT_TYPE SYS_C00478605 C SYS_C00478606 C SYS_C00478607 SYS_C00478607 P
Bây giờ chúng ta hãy xem cấp độ Bảng
Table Level SQL> CREATE TABLE DEPT_MASTER ( dept_nr NUMBER , dept_name varchar2(100) NOT NULL, dept_status NUMBER(1,0) NOT NULL, created_at date, PRIMARY KEY ("DEPT_NR") ); 2 3 4 5 6 7 Table created. SQL> select index_name from dba_indexes where table_name='DEPT_MASTER'; INDEX_NAME SYS_C0013850525 SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER'; CONSTRAINT_NAME INDEX_NAME CONSTRAINT_TYPE SYS_C00478605 C SYS_C00478606 C SYS_C00478607 SYS_C00478607 P
Chúng ta có thể đặt tên tùy chỉnh của ràng buộc khóa chính bằng cách sử dụng thêm mệnh đề ràng buộc như được hiển thị bên dưới
SQL> CREATE TABLE DEPT_MASTER ( dept_nr NUMBER , dept_name varchar2(100) NOT NULL, dept_status NUMBER(1,0) NOT NULL, created_at date, CONSTRAINT PK_DEPT_NR PRIMARY KEY ("DEPT_NR") ); Table created. SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER'; CONSTRAINT_NAME INDEX_NAME CONSTRAINT_TYPE SYS_C00478609 C SYS_C00478608 C PK_DEPT_NR PK_DEPT_NR P
Bảng có Chính có thể được biểu diễn dưới dạng Sơ đồ
Bảng thay thế Thêm khóa chính
Hãy xem cách thêm Chính sau khi tạo bảng
CREATE TABLE DEPT_MASTER ( dept_nr NUMBER , dept_name varchar2(100) NOT NULL, dept_status NUMBER(1,0) NOT NULL, created_at date ); SQL> alter table DEPT_MASTER add primary key ( dept_nr); Table altered. SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER'; CONSTRAINT_NAME INDEX_NAME CONST SYS_C00485778 C SYS_C00485779 C SYS_C00485780 SYS_C00485780 P
Chúng tôi cũng có thể đặt tên tùy chỉnh trong khi thêm khóa chính
SQL> alter table DEPT_MASTER add constraint DEPT_MASTER_ID primary key ( dept_nr); Table altered. SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER'; CONSTRAINT_NAME INDEX_NAME CONST SYS_C00485778 C SYS_C00485779 C DEPT_MASTER_ID DEPT_MASTER_ID P
cách tạo khóa chính tổng hợp trong oracle
Bây giờ, hãy xem cách thêm khóa chính cho khóa tổng hợp
CREATE TABLE CUSTOMER( CUSTOMER_ID NUMBER(6,0), NAME VARCHAR (20) NOT NULL, AGE NUMBER(6,0) NOT NULL, ADDRESS VARCHAR2(25), SALARY NUMBER(6,0), PRIMARY KEY (CUSTOMER_ID, NAME) ); SQL> col CONSTRAINT_NAME format a20 SQL> col INDEX_NAME format a20 SQL> col CONSTRAINT_TYPE format a5 SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='CUSTOMER'; CONSTRAINT_NAME INDEX_NAME CONST SYS_C00485772 C SYS_C00485773 C SYS_C00485774 SYS_C00485774 P
Chúng tôi cũng có thể đặt tên tùy chỉnh cho các ràng buộc khóa chính trên khóa Tổng hợp
SQL>CREATE TABLE CUSTOMER( CUSTOMER_ID NUMBER(6,0), NAME VARCHAR (20) NOT NULL, AGE NUMBER(6,0) NOT NULL, ADDRESS VARCHAR2(25), SQL> SALARY NUMBER(6,0), CONSTRAINT PK_CUSTOMER PRIMARY KEY (CUSTOMER_ID, NAME) ); Table created. SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='CUSTOMER'; CONSTRAINT_NAME INDEX_NAME CONST SYS_C00485776 C SYS_C00485775 C PK_CUSTOMER PK_CUSTOMER P
Cấu trúc chính tổng hợp có thể được biểu diễn dưới dạng
cách bỏ khóa chính trong oracle
Chúng ta có thể bỏ khóa chính bằng lệnh dưới đây. Chúng tôi có thể sử dụng khóa chính thả hoặc thả các ràng buộc
SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER'; CONSTRAINT_NAME INDEX_NAME CONST SYS_C00485778 C SYS_C00485779 C DEPT_MASTER_ID DEPT_MASTER_ID P SQL> alter table DEPT_MASTER drop primary key; Table altered. SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER'; CONSTRAINT_NAME INDEX_NAME CONST SYS_C00485778 C SYS_C00485779 C SQL> alter table DEPT_MASTER add constraint DEPT_MASTER_ID primary key ( dept_nr); Table altered. SQL> alter table DEPT_MASTER drop constraint DEPT_MASTER_ID; Table altered. SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER'; CONSTRAINT_NAME INDEX_NAME CONST SYS_C00485778 C SYS_C00485779 C
Cách Bật / Tắt các ràng buộc Khóa Chính
SQL> alter table DEPT_MASTER enable primary key; Table altered. SQL> alter table DEPT_MASTER disable primary key; Table altered. SQL> alter table DEPT_MASTER disable constraint DEPT_MASTER_ID; Table altered. SQL> alter table DEPT_MASTER enable constraint DEPT_MASTER_ID; Table altered
Cách thêm Khóa chính bằng Chỉ mục
Khi oracle tạo khóa chính, nó sẽ tạo chỉ mục duy nhất trên cột đó trong bảng để thực thi các ràng buộc khóa chính. Nhưng nếu bảng có một chỉ mục trước khi thêm khóa Chính, thì Oracle cũng có thể sử dụng chỉ mục đó cho các ràng buộc khóa chính. Oracle có thể thực thi các ràng buộc khóa chính trên cả chỉ mục duy nhất, không duy nhất và chỉ mục tổng hợp. Oracle sẽ sử dụng chỉ mục tùy thuộc vào bảng chỉ mục đã có. Chúng tôi cũng có thể sử dụng mệnh đề chỉ mục tại thời điểm tạo khóa chính nếu chúng tôi muốn thực thi ràng buộc bằng cách sử dụng một chỉ mục cụ thể
SQL> create index DEPT_MASTER_IDX on DEPT_MASTER(dept_nr); Index created. SQL> alter table DEPT_MASTER add constraint DEPT_MASTER_ID primary key ( dept_nr) using index DEPT_MASTER_IDX; Table altered. SQL> col CONSTRAINT_NAME format a20 SQL> col INDEX_NAME format a20 SQL> col CONSTRAINT_TYPE format a5 SQL> / CONSTRAINT_NAME INDEX_NAME CONST DEPT_MASTER_ID DEPT_MASTER_IDX P SYS_C00485779 C SYS_C00485778 C
Ngay cả khi chúng ta không sử dụng chỉ mục trong câu lệnh trước đó, oracle vẫn sẽ có cùng một chỉ mục không phải là duy nhất để thực thi các ràng buộc khóa chính
SQL> create index DEPT_MASTER_IDX on DEPT_MASTER(dept_nr); Index created. SQL> alter table DEPT_MASTER add constraint DEPT_MASTER_ID primary key ( dept_nr); Table altered. SQL> col CONSTRAINT_NAME format a20 SQL> col INDEX_NAME format a20 SQL> col CONSTRAINT_TYPE format a5 SQL> / CONSTRAINT_NAME INDEX_NAME CONST DEPT_MASTER_ID DEPT_MASTER_IDX P SYS_C00485779 C SYS_C00485778
cách sửa đổi khóa chính trong oracle
Chúng tôi không thể chỉ sửa đổi giá trị Khóa chính. chúng ta sẽ cần bỏ khóa cũ và tạo khóa chính mới. Nếu chúng ta có các ràng buộc khóa ngoại tham chiếu đến chúng. thì trước tiên chúng ta cần thả chúng xuống và thả khóa chính và tạo lại khóa chính mới
cách tự động tăng khóa chính trong oracle
Với 12c, chúng tôi có hai cách dễ dàng để triển khai tự động tăng dần cho khóa chính
Cột nhận dạng
Trong Cơ sở dữ liệu Oracle 12c, Chúng ta có thể xác định các cột của Bảng bằng từ khóa SQL IDENTITY, là một từ khóa SQL của Viện Tiêu chuẩn Quốc gia Hoa Kỳ (ANSI). Các giá trị này được tăng tự động tại thời điểm chèn (như trong MySQL).
Example: create table test ( id number generated as identity PRIMARY KEY, name varchar2(100), email varchar2(100), password varchar2(100)firstname varchar2(100)lastname varchar2(100) );
Trình tự làm giá trị mặc định
Với Oracle Database 12c, chúng ta có thể chỉ định trực tiếp giá trị tiếp theo của chuỗi làm giá trị mặc định cho một cột, Vì vậy, bạn không cần phải tạo trình kích hoạt để điền vào cột với giá trị tiếp theo của chuỗi, bạn chỉ cần khai báo nó với bảng định nghĩa. Đây là một loại tính năng tự động tăng dần cho một cột trong oracle giống như MySQL
Example: create sequence tech_test_seq start with 1 increment by 1 nocycle; create table test ( id number default tech_test_seq.nextval primary key name varchar(30) );
cách đổi tên khóa chính trong oracle
Chúng ta có thể dễ dàng đổi tên các ràng buộc khóa chính bằng cách sử dụng thay đổi tên bảng sql. Điều này không ảnh hưởng đến quá trình xử lý và khóa ngoại
CREATE TABLE DEPT_MASTER ( dept_nr NUMBER , dept_name varchar2(100) NOT NULL, dept_status NUMBER(1,0) NOT NULL, created_at date ); alter table DEPT_MASTER add constraint DEPT_MASTER_ID primary key ( dept_nr); Table altered. select CONSTRAINT_NAME from user_constraints where TABLE_NAME='DEPT_MASTER' and constraint_type = 'P'; CONSTRAINT_NAME ------------- DEPT_MASTER_ID ALTER TABLE DEPT_MASTER RENAME CONSTRAINT DEPT_MASTER_ID TO DEPT_MASTER_ID_PK; select CONSTRAINT_NAME from user_constraints where TABLE_NAME='DEPT_MASTER' and constraint_type = 'P'; CONSTRAINT_NAME ------------- DEPT_MASTER_ID_PK I hope you like the content on primary key and it clear all doubts about the Primary Key concept. Please do provide the feedback and what else can be added in this post
Cũng đã đọc
Check Constraint trong Oracle:Oracle Check Constraint được sử dụng để thực thi các quy tắc toàn vẹn dựa trên các biểu thức logic, chẳng hạn như so sánh. Điều kiện kiểm tra phải trả về true hoặc false
Không ràng buộc Null trong Oracle:
Hàm NVL2 trong Oracle:Tìm hiểu cách sử dụng hàm NVL2 trong Oracle với các ví dụ
thay đổi bảng sửa đổi cột oracle
https://en.wikipedia.org/wiki/Primary_key
Các khóa học được đề xuất
Đây là Khóa học Udemy hay dành cho Oracle SQL
Oracle-Sql-Step-by-step:Khóa học này bao gồm sql cơ bản, các phép nối, Tạo Bảng và sửa đổi cấu trúc của nó, Tạo Dạng xem, Liên minh, Liên hợp-tất cả và nhiều thứ khác . Một khóa học tuyệt vời và phải có cho người mới bắt đầu sử dụng SQL
Khóa học chứng chỉ SQL Oracle hoàn chỉnh :Đây là một khóa học tốt cho bất kỳ ai muốn sẵn sàng tìm việc cho các kỹ năng của nhà phát triển SQL. Một khóa học được giải thích thú vị
Oracle SQL Developer:Cơ bản, Mẹo và Thủ thuật :Công cụ dành cho nhà phát triển Oracle Sql đang được nhiều nhà phát triển sử dụng. Khóa học này cung cấp cho chúng ta các thủ thuật và bài học về cách sử dụng nó một cách hiệu quả và trở thành một nhà phát triển sql hiệu quả
Oracle SQL Performance Tuning Masterclass 2020 :Điều chỉnh hiệu suất là một trong những kỹ năng quan trọng và được tìm kiếm nhiều nhất. Đây là một khóa học tốt để tìm hiểu về nó và bắt đầu thực hiện điều chỉnh hiệu suất sql