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
- Nie możesz mieć w nim zduplikowanych wartości. tzn. powinien być unikalny w tabeli
- Nie może być null ani zawierać pustych ciągów
- Nie należy tego zmieniać z biegiem czasu
- Możemy mieć tylko jeden klucz podstawowy w tabeli
Zalecenie
- Sugeruje się, aby kluczem podstawowym były wartości liczbowe, ponieważ jest to szybsze
- 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