We beginnen met een inleiding tot de primaire sleutel in orakel en daarna duiken we in verschillende vragen hierover.
Inleiding tot de primaire sleutel
Een primaire sleutel is een kolom of reeks kolommen in de tabel die op unieke wijze een rij in de tabel identificeert.
Eigenschappen van primaire sleutel
- Je kunt er geen dubbele waarden in hebben. d.w.z. het moet uniek zijn in de tabel
- Het mag niet null zijn of lege tekenreeksen bevatten
- Het mag in de loop van de tijd niet worden gewijzigd
- We kunnen maar één primaire sleutel in de tabel hebben
Aanbeveling
- Het wordt aanbevolen om numerieke waarden als primaire sleutel te gebruiken omdat dit sneller is
- Alle tabellen moeten primaire sleutels hebben
Hoe een primaire sleutel in orakel toe te voegen
De primaire sleutel kan worden toegevoegd bij het maken van de tafel of kan worden gemaakt na het maken van de tafel.
Laten we eerst uitchecken voor het maken van een tafel
Primaire sleutel bij het maken van een tafel
Het kan worden gedefinieerd op kolom- of tabelniveau. Samengestelde primaire sleutels worden alleen op tabelniveau gedefinieerd. Wanneer orakel de primaire sleutel maakt, wordt de unieke index voor die kolom in de tabel gemaakt om de beperkingen van de primaire sleutel af te dwingen.
Laten we eerst het kolomniveau bekijken
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
Laten we nu eens kijken voor tafelniveau
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
We kunnen de aangepaste naam van de primaire sleutelbeperking ook geven met de add constraint-clausule zoals hieronder weergegeven
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
Tabel met primair kan worden weergegeven als diagram
Tabel wijzigen Primaire sleutel toevoegen
Laten we eens kijken hoe we de Primary kunnen toevoegen nadat de tabel is gemaakt
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
We kunnen ook aangepaste namen geven terwijl we de primaire sleutel toevoegen
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
hoe maak je een samengestelde primaire sleutel in oracle
Laten we nu eens kijken hoe we een primaire sleutel voor de samengestelde sleutel kunnen toevoegen
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
We kunnen de aangepaste naam voor de primaire sleutelbeperkingen ook op de samengestelde sleutel geven
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
De samengestelde Primary kan worden weergegeven als
hoe de primaire sleutel in orakel te laten vallen
We kunnen de primaire sleutel laten vallen met behulp van de onderstaande opdracht. We kunnen drop-primaire sleutel of drop-beperkingen gebruiken
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
Hoe primaire sleutelbeperkingen in-/uitschakelen
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
Hoe een primaire sleutel toe te voegen met behulp van de index
Wanneer orakel de primaire sleutel maakt, wordt de unieke index voor die kolom in de tabel gemaakt om de beperkingen van de primaire sleutel af te dwingen. Maar als de tabel een index heeft voordat de primaire sleutel is toegevoegd, kan Oracle die index ook gebruiken voor primaire sleutelbeperkingen. Oracle kan primaire sleutelbeperkingen afdwingen op zowel unieke, niet-unieke als samengestelde indexen. Oracle zal de index gebruiken, afhankelijk van de indexentabel die er al is. We kunnen ook de indexclausule gebruiken tijdens het maken van de primaire sleutel, ook als we beperking willen afdwingen met behulp van een bepaalde index
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
Zelfs als we het gebruik van index in deze eerdere verklaring niet gebruiken, heeft het orakel nog steeds dezelfde niet-unieke index voor het afdwingen van primaire sleutelbeperkingen
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
hoe de primaire sleutel in orakel te wijzigen
We kunnen niet zomaar de waarde van de primaire sleutel wijzigen. we zullen de oude sleutel moeten laten vallen en de nieuwe primaire moeten maken. Als we externe sleutelbeperkingen hebben die ernaar verwijzen. dan moeten we ze eerst laten vallen en de primaire sleutel laten vallen en opnieuw de nieuwe primaire sleutel maken
hoe de primaire sleutel automatisch te verhogen in orakel
Met 12c hebben we twee eenvoudige manieren om automatische verhoging voor primaire sleutel te implementeren
Identiteitskolommen
In Oracle Database 12c kunnen we tabelkolommen definiëren met het SQL-sleutelwoord IDENTITY, een SQL-sleutelwoord van het American National Standards Institute (ANSI). Die automatisch worden verhoogd op het moment van invoegen (zoals in 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) );
Opeenvolging als standaardwaarde
Met Oracle Database 12c kunnen we sequence nextval direct toewijzen als standaardwaarde voor een kolom. U hoeft dus niet langer een trigger te maken om de kolom te vullen met de volgende waarde van sequence, u hoeft het alleen maar aan te geven met tabel definitie. Het is een soort auto-increment-functie voor een kolom in Oracle, net als 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) );
hoe de primaire sleutel in orakel te hernoemen
We kunnen de primaire-sleutelbeperkingen gemakkelijk hernoemen met behulp van alter table rename sql. Dit heeft geen invloed op de verwerking en de refererende sleutel
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
Leest ook
Check Constraint in Oracle :Oracle Check Constraint wordt gebruikt om integriteitsregels af te dwingen op basis van logische uitdrukkingen, zoals vergelijkingen. De controlevoorwaarde moet true of false retourneren
Niet Null-beperking in Oracle:
NVL2-functie in Oracle:leer hoe u de NVL2-functie in Oracle gebruikt met voorbeelden
tabel wijzigen kolom Oracle
https://en.wikipedia.org/wiki/Primary_key
Aanbevolen cursussen
Hier is de mooie Udemy-cursus voor Oracle SQL
Oracle-Sql-Step-voor-stap:deze cursus behandelt basis-sql, joins, tabellen maken en de structuur wijzigen, weergave maken, Union, Union -alles en nog veel meer . Een geweldige cursus en een must-have cursus voor SQL-starters
De complete Oracle SQL-certificeringscursus :Dit is een goede cursus voor iedereen die Job-klaar wil zijn voor SQL-ontwikkelaarsvaardigheden. Een mooi uitgelegde cursus
Oracle SQL Developer:Essentials, Tips and Tricks :Oracle Sql-ontwikkelaarstool wordt door veel ontwikkelaars gebruikt. Deze cursus geeft ons trucs en lessen om het effectief te gebruiken en een productieve sql-ontwikkelaar te worden
Oracle SQL Performance Tuning Masterclass 2020 :Het afstemmen van prestaties is een van de kritische en meest gezochte vaardigheden. Dit is een goede cursus om erover te leren en te beginnen met het afstemmen van sql-prestaties