Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Najpopularniejsze zapytania dotyczące klucza podstawowego w Oracle z przykładami

Zaczniemy od wprowadzenia do klucza podstawowego w Oracle, a następnie zajmiemy się różnymi zapytaniami na jego temat.

Wprowadzenie do klucza podstawowego

Klucz podstawowy to kolumna lub zestaw kolumn w tabeli, który jednoznacznie identyfikuje wiersz w tabeli.

Właściwości klucza podstawowego

  1. Nie możesz mieć w nim zduplikowanych wartości. tzn. powinien być unikalny w tabeli
  2. Nie może być null ani zawierać pustych ciągów
  3. Nie należy tego zmieniać z biegiem czasu
  4. Możemy mieć tylko jeden klucz podstawowy w tabeli

Zalecenie

  1. Sugeruje się, aby kluczem podstawowym były wartości liczbowe, ponieważ jest to szybsze
  2. Wszystkie tabele powinny mieć klucze podstawowe

Jak dodać klucz podstawowy w Oracle

Klucz podstawowy można dodać podczas tworzenia tabeli lub można go utworzyć po utworzeniu tabeli.
Najpierw sprawdźmy, jak utworzyć tabelę

Klucz główny przy tworzeniu tabeli

Można go zdefiniować na poziomie kolumny lub tabeli. Złożone klucze podstawowe są definiowane tylko na poziomie tabeli. Kiedy Oracle tworzy klucz podstawowy, tworzy unikalny indeks w tej kolumnie w tabeli, aby wymusić ograniczenia klucza podstawowego.

Sprawdźmy najpierw poziom kolumny

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

Zobaczmy teraz poziom tabeli

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

Możemy nadać niestandardową nazwę ograniczenia klucza podstawowego również za pomocą klauzuli add bound, jak pokazano poniżej

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

Tabela z podstawowym może być reprezentowana jako diagram

Zmień tabelę Dodaj klucz podstawowy

Zobaczmy, jak dodać podstawowy po utworzeniu tabeli

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

Możemy nadać niestandardowe nazwy również podczas dodawania klucza podstawowego

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

jak utworzyć złożony klucz podstawowy w Oracle

Zobaczmy teraz, jak dodać klucz podstawowy do klucza złożonego

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

Możemy również nadać niestandardową nazwę dla ograniczeń klucza podstawowego w kluczu złożonym

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

Złożony Główny może być reprezentowany jako

jak usunąć klucz podstawowy w Oracle

Możemy usunąć klucz podstawowy za pomocą poniższego polecenia. Możemy użyć klucza głównego upuszczania lub ograniczeń upuszczania

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

Jak włączyć/wyłączyć ograniczenia klucza podstawowego

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

Jak dodać klucz podstawowy za pomocą indeksu

Gdy Oracle tworzy klucz podstawowy, tworzy unikalny indeks w tej kolumnie w tabeli, aby wymusić ograniczenia klucza podstawowego. Ale jeśli tabela ma indeks przed dodaniem klucza podstawowego, Oracle może użyć tego indeksu również do ograniczeń klucza podstawowego. Oracle może wymusić ograniczenia klucza podstawowego zarówno na indeksach unikalnych, nieunikalnych, jak i złożonych. Oracle użyje indeksu w zależności od tego, jaką tabelę indeksów już posiada. Możemy również użyć klauzuli index w czasie tworzenia klucza podstawowego, również jeśli chcemy wymusić ograniczenie przy użyciu konkretnego indeksu

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

Nawet jeśli nie użyjemy używania indeksu w tym wcześniejszym stwierdzeniu, wyrocznia nadal będzie miała ten sam nieunikalny indeks do wymuszania ograniczeń klucza podstawowego

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      

jak zmodyfikować klucz podstawowy w Oracle

Nie możemy po prostu zmodyfikować wartości klucza podstawowego. będziemy musieli usunąć stary klucz i utworzyć nowy klucz podstawowy. Jeśli mamy ograniczenia klucza obcego, które do nich się odwołują. następnie musimy je najpierw usunąć, a następnie usunąć klucz podstawowy i ponownie utworzyć nowy klucz podstawowy

jak automatycznie zwiększać klucz podstawowy w Oracle

Dzięki 12c mamy dwa proste sposoby na zaimplementowanie automatycznego przyrostu klucza podstawowego

Kolumny tożsamości
W Oracle Database 12c możemy zdefiniować kolumny tabeli za pomocą słowa kluczowego SQL IDENTITY, które jest słowem kluczowym SQL American National Standards Institute (ANSI). Które są automatycznie zwiększane w momencie wstawiania (jak w 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)
);

Sekwencja jako wartość domyślna
Dzięki Oracle Database 12c możemy bezpośrednio przypisać sekwencję nextval jako wartość domyślną dla kolumny, więc nie musisz już tworzyć wyzwalacza, aby wypełnić kolumnę następną wartością sekwencji, wystarczy zadeklarować ją za pomocą definicja tabeli. Jest to rodzaj funkcji auto-inkrementacji dla kolumny w Oracle, podobnie jak 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)
);

jak zmienić nazwę klucza podstawowego w Oracle

Możemy łatwo zmienić nazwy ograniczeń klucza podstawowego za pomocą polecenia alter table rename sql. Nie ma to wpływu na przetwarzanie i klucz obcy

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 

Też czyta
Sprawdź ograniczenie w Oracle:Oracle Sprawdź ograniczenie służy do egzekwowania reguł integralności opartych na wyrażeniach logicznych, takich jak porównania. Warunek sprawdzenia musi zwracać prawdę lub fałsz
Not Null ograniczenie w Oracle:
Funkcja NVL2 w Oracle:Dowiedz się, jak używać funkcji NVL2 w Oracle na przykładach
zmień tabelę, zmodyfikuj wyrocznię kolumn
https://en.wikipedia.org/wiki/Primary_key

Polecane kursy

Oto fajny kurs Udemy dotyczący Oracle SQL
Oracle-Sql-Step-by-step :Ten kurs obejmuje podstawowy SQL, złączenia, tworzenie tabel i modyfikowanie ich struktury, tworzenie widoków, łączenie, łączenie i wiele innych rzeczy . Świetny kurs i obowiązkowy kurs dla początkujących SQL
Pełny kurs certyfikacji Oracle SQL :To dobry kurs dla każdego, kto chce być gotowym do pracy w zakresie umiejętności programistycznych SQL. Fajnie objaśniony kurs
Oracle SQL Developer:Essentials, Tips and Tricks :Narzędzie programistyczne Oracle SQL jest używane przez wielu programistów. Ten kurs zawiera sztuczki i lekcje, jak skutecznie z niego korzystać i zostać produktywnym programistą sql
Oracle SQL Performance Tuning Masterclass 2020 :Dostrajanie wydajności jest jedną z najważniejszych i najbardziej poszukiwanych umiejętności. To dobry kurs, aby się o tym dowiedzieć i zacząć dostrajać wydajność 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. Jak wstawić długi ciąg do typu danych CLOB w Oracle?

  2. Konwersja bazy 36 do bazy 10 tylko przy użyciu SQL

  3. Jak uzyskać liczbę elementów w tablicy JSON przechowywanej jako CLOB w Oracle 12c?

  4. jak zamienić wiele ciągów razem w Oracle

  5. Najszybszy sposób na sprawdzenie, czy jakieś rekordy w tabeli bazy danych?