Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Các truy vấn hàng đầu về khóa chính trong Oracle với các ví dụ

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

  1. 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
  2. Nó không được rỗng hoặc chứa các chuỗi trống
  3. Nó sẽ không được thay đổi theo thời gian
  4. Chúng tôi chỉ có thể có một khóa chính trong bảng

Đề xuất

  1. Bạn nên sử dụng các giá trị số làm khóa chính vì nó nhanh hơn
  2. 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để kiểm tra xem con trỏ có trả về bất kỳ bản ghi nào trong oracle hay không?

  2. Logic kinh doanh:Cơ sở dữ liệu hoặc Lớp ứng dụng

  3. Cách định dạng số trong Oracle

  4. Sử dụng truy vấn con trong câu lệnh Kiểm tra trong Oracle

  5. Loại bỏ các bản sao bằng cách sử dụng hàm LISTAGG của Oracle