Vi börjar med en introduktion till primärnyckeln i Oracle och sedan kommer vi att dyka ner i olika frågor om den.
Introduktion till primärnyckel
En primärnyckel är en kolumn eller uppsättning kolumner i tabellen som unikt identifierar en rad i tabellen.
Egenskaper för primär nyckel
- Du kan inte ha dubbletter av värden. dvs det ska vara unikt i tabellen
- Det får inte vara null eller innehålla tomma strängar
- Det bör inte ändras med tiden
- Vi kan bara ha en primärnyckel i tabellen
Rekommendation
- Det rekommenderas att ha numeriska värden som primärnyckel eftersom det är snabbare
- Alla tabeller bör ha primärnycklar
Hur man lägger till primärnyckel i Oracle
Den primära nyckeln kan läggas till vid skapandet av tabeller eller kan skapas efter tabellskapandet.
Låt oss först kolla in tabellskapandet
Primärnyckel vid skapande av bord
Det kan definieras på kolumnnivå eller tabellnivå. Sammansatta primärnycklar definieras endast på tabellnivå. När Oracle skapar primärnyckeln skapar det det unika indexet på den kolumnen i tabellen för att upprätthålla primärnyckelns begränsningar.
Låt oss först kolla in kolumnnivån
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
Låt oss nu se för tabellnivå
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
Vi kan ge det anpassade namnet på primärnyckelrestriktionen också genom att använda add constraint-satsen som visas nedan
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
Tabell med primär kan representeras som diagram
Ändra tabell Lägg till primär nyckel
Låt oss se hur du lägger till den primära efter tabellskapandet
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
Vi kan också ge anpassade namn samtidigt som vi lägger till primärnyckeln
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
hur man skapar en sammansatt primärnyckel i Oracle
Låt oss nu kolla in hur man lägger till en primärnyckel för den sammansatta nyckeln
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
Vi kan också ge det anpassade namnet för primärnyckelns restriktioner på den sammansatta nyckeln
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
Den sammansatta primära kan representeras som
hur man släpper primärnyckeln i Oracle
Vi kan släppa primärnyckeln med kommandot nedan. Vi kan använda släpp primärnyckel eller släppbegränsningar
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
Hur man aktiverar/inaktiverar primärnyckelbegränsningar
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
Hur man lägger till primärnyckel med hjälp av Index
När Oracle skapar primärnyckeln skapar det det unika indexet på den kolumnen i tabellen för att upprätthålla primärnyckelns begränsningar. Men om tabellen har ett index före tillägget av den primära nyckeln, kan Oracle också använda det indexet för primärnyckelrestriktioner. Oracle kan genomdriva primära nyckelbegränsningar på både unika, icke-unika och sammansatta index. Oracle kommer att använda indexet beroende på vilka indextabeller som redan har. Vi kan också använda indexklausul när primärnyckeln skapas, även om vi vill upprätthålla begränsningar med ett visst 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
Även om vi inte använder index i detta tidigare uttalande, kommer oraklet fortfarande att ha samma icke-unika index för att upprätthålla primärnyckelbegränsningar
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
hur man ändrar primärnyckeln i Oracle
Vi kan inte bara ändra det primära nyckelvärdet. vi kommer att behöva släppa den gamla nyckeln och skapa den nya primära. Om vi har främmande nyckelbegränsningar som refererar till dessa. då måste vi släppa dem först och släppa primärnyckeln och skapa den nya primärnyckeln igen
hur man automatiskt ökar primärnyckeln i Oracle
Med 12c har vi två enkla sätt att implementera automatisk ökning för primärnyckel
Identitetskolumner
I Oracle Database 12c kan vi definiera tabellkolumner med SQL-nyckelordet IDENTITY som är ett SQL-nyckelord från American National Standards Institute (ANSI). Som automatiskt inkrementeras vid tidpunkten för insättningen (som i 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) );
Sekvens som standardvärde
Med Oracle Database 12c kan vi direkt tilldela sekvens nextval som ett standardvärde för en kolumn, så du behöver inte längre skapa en trigger för att fylla kolumnen med nästa värde i sekvensen, du behöver bara deklarera det med tabelldefinition. Det är en sorts automatisk inkrementfunktion för en kolumn i oracle precis som 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) );
hur man byter namn på primärnyckeln i Oracle
Vi kan enkelt byta namn på primärnyckelbegränsningarna genom att använda alter table rename sql. Detta påverkar inte bearbetningen och den främmande nyckeln
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
Läser också
Check Constraint i Oracle :Oracle Check Constraint används för att genomdriva integritetsregler baserade på logiska uttryck, som jämförelser. Kontrollvillkoret måste returnera sant eller falskt
Not Null-begränsning i Oracle:
NVL2-funktion i Oracle:Lär dig hur du använder NVL2-funktionen i Oracle med exempel
ändra tabell modifiera kolumn-oracle
https://en.wikipedia.org/wiki/Primary_key
Rekommenderade kurser
Här är den trevliga Udemy-kursen för Oracle SQL
Oracle-Sql-Steg-för-steg :Den här kursen täcker grundläggande sql, joins, Skapa tabeller och ändra dess struktur, Skapa vy, Union, Union -allt och mycket annat . En bra kurs och måste-kurs för SQL-startare
The Complete Oracle SQL Certification Course :Det här är en bra kurs för alla som vill vara redo för SQL-utvecklare. En trevlig förklarad kurs
Oracle SQL Developer:Essentials, Tips and Tricks :Oracle Sql-utvecklarverktyget används av många utvecklare. Den här kursen ger oss tricks och lektioner om hur man effektivt använder den och blir en produktiv SQL-utvecklare
Oracle SQL Performance Tuning Masterclass 2020 :Prestandajustering är en av de kritiska och mest eftertraktade färdigheterna. Det här är en bra kurs för att lära dig om det och börja göra sql-prestandajustering