sql >> Database teknologi >  >> RDS >> Oracle

Topforespørgsler om primærnøgle i Oracle med eksempler

Vi starter med en introduktion til den primære nøgle i oracle, og derefter vil vi dykke ned i forskellige forespørgsler på den.

Introduktion til primær nøgle

En primær nøgle er en kolonne eller et sæt kolonner i tabellen, som entydigt identificerer en række i tabellen.

Egenskaber for primær nøgle

  1. Du kan ikke have dublerede værdier i den. dvs. den skal være unik i tabellen
  2. Den må ikke være null eller indeholde tomme strenge
  3. Det bør ikke ændres over tid
  4. Vi kan kun have én primær nøgle i tabellen

Anbefaling

  1. Det foreslås at have numeriske værdier som den primære nøgle, da det er hurtigere
  2. Alle tabeller skal have primærnøgler

Sådan tilføjer du primærnøgle i Oracle

Den primære nøgle kan tilføjes ved tabeloprettelse eller kan oprettes efter tabeloprettelse.
Lad os først tjekke ud for tabeloprettelse

Primær nøgle ved bordoprettelse

Det kan defineres på kolonneniveau eller tabelniveau. Sammensatte primære nøgler er kun defineret på tabelniveau. Når Oracle opretter den primære nøgle, opretter det det unikke indeks på den kolonne i tabellen for at håndhæve de primære nøglebegrænsninger.

Lad os først tjekke kolonneniveauet

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

Lad os nu se på tabelniveau

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 også give det brugerdefinerede navn på den primære nøglebetingelse ved at bruge add constraint-klausulen som vist nedenfor

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 med Primær kan repræsenteres som Diagram

Ændre tabel Tilføj primær nøgle

Lad os se, hvordan du tilføjer den primære efter tabeloprettelse

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 også give brugerdefinerede navne, mens vi tilføjer den primære nøgle

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

hvordan man opretter sammensat primærnøgle i Oracle

Lad os nu se, hvordan man tilføjer en primær nøgle til den sammensatte nøgle

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 også give det brugerdefinerede navn for de primære nøglebegrænsninger på den sammensatte nøgle

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 sammensatte primære kan repræsenteres som

hvordan man dropper primærnøgle i Oracle

Vi kan slippe den primære nøgle ved at bruge nedenstående kommando. Vi kan bruge drop primær nøgle eller drop begrænsninger

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

Sådan aktiverer/deaktiverer du primærnøglebegrænsninger

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

Sådan tilføjer du primær nøgle ved hjælp af indeks

Når oracle opretter den primære nøgle, opretter det det unikke indeks på den kolonne i tabellen for at håndhæve de primære nøglebegrænsninger. Men hvis tabellen har et indeks før tilføjelsen af ​​den primære nøgle, kan Oracle også bruge dette indeks til primærnøglebegrænsninger. Oracle kan håndhæve primære nøglebegrænsninger på både unikke, ikke-unikke og sammensatte indekser. Oracle vil bruge indekset afhængigt af de indekstabeller, som allerede har. Vi kan også bruge indekssætning ved oprettelse af primær nøgle, også hvis vi ønsker at håndhæve begrænsninger ved hjælp af et bestemt indeks

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

Selvom vi ikke bruger indeks i denne tidligere erklæring, vil oraklet stadig have det samme ikke-unikke indeks til at håndhæve primære nøglebegrænsninger

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      

hvordan man ændrer primærnøgle i Oracle

Vi kan ikke bare ændre den primære nøgleværdi. vi bliver nødt til at slippe den gamle nøgle og oprette den nye primære. Hvis vi har udenlandske nøglebegrænsninger, der refererer til dem. så skal vi slippe dem først og slippe den primære nøgle og oprette den nye primære nøgle igen

hvordan man automatisk øger primærnøgle i Oracle

Med 12c har vi to nemme måder at implementere automatisk stigning for primærnøgle

Identitetskolonner
I Oracle Database 12c kan vi definere tabelkolonner med SQL-nøgleord IDENTITY, som er et SQL-nøgleord fra American National Standards Institute (ANSI). Som øges automatisk på tidspunktet for indsættelse (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ærdi
Med Oracle Database 12c kan vi direkte tildele sekvens nextval som en standardværdi for en kolonne, så du behøver ikke længere at oprette en trigger for at udfylde kolonnen med den næste værdi af sekvensen, du skal bare erklære den med tabel definition. Det er en slags automatisk stigningsfunktion for en kolonne i oracle ligesom 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)
);

hvordan man omdøber primærnøgle i Oracle

Vi kan nemt omdøbe de primære nøglebegrænsninger ved at bruge alter table rename sql. Dette påvirker ikke behandlingen og fremmednøglen

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 også
Check Constraint i Oracle:Oracle Check Constraint bruges til at håndhæve integritetsregler baseret på logiske udtryk, såsom sammenligninger. Kontrolbetingelsen skal returnere sand eller falsk
Not Null constraint i Oracle:
NVL2-funktion i Oracle:Lær hvordan du bruger NVL2-funktionen i Oracle med eksempler
ændre tabel modify column oracle
https://en.wikipedia.org/wiki/Primary_key

Anbefalede kurser

Her er det fine Udemy-kursus til Oracle SQL
Oracle-Sql-trin-for-trin :Dette kursus dækker grundlæggende sql, joins, oprettelse af tabeller og ændring af strukturen, Create View, Union, Union -alle og meget andet. . Et godt kursus og must-have kursus for SQL starter
The Complete Oracle SQL Certification Course :Dette er et godt kursus for enhver, der ønsker at være jobklar til SQL-udviklerfærdigheder. Et godt forklaret kursus
Oracle SQL Developer:Essentials, Tips and Tricks :Oracle Sql-udviklerværktøj bliver brugt af mange udviklere. Dette kursus giver os tricks og lektioner til, hvordan man effektivt bruger det og bliver en produktiv sql-udvikler
Oracle SQL Performance Tuning Masterclass 2020 :Ydeevnejustering er en af ​​de kritiske og mest søgte færdigheder. Dette er et godt kursus for at lære om det og begynde at lave sql-ydelsesjustering


  1. Hvilken tidsseriedatabase er bedre:TimescaleDB vs InfluxDB

  2. Bedste datatype til lagring af valutaværdier i en MySQL-database

  3. Tuning af SQL

  4. Download en kopi af din database