sql >> Databáze >  >> RDS >> Oracle

Nejčastější dotazy na primární klíč v Oracle s příklady

Začneme úvodem k primárnímu klíči v oracle a poté se ponoříme do různých dotazů na něj.

Úvod do primárního klíče

Primární klíč je sloupec nebo sada sloupců v tabulce, která jednoznačně identifikuje řádek v tabulce.

Vlastnosti primárního klíče

  1. Nemůžete v něm mít duplicitní hodnoty. tj. měl by být jedinečný v tabulce
  2. Nesmí mít hodnotu null ani obsahovat prázdné řetězce
  3. Nemělo by se časem měnit
  4. V tabulce můžeme mít pouze jeden primární klíč

Doporučení

  1. Doporučujeme mít jako primární klíč číselné hodnoty, protože je to rychlejší
  2. Všechny tabulky by měly mít primární klíče

Jak přidat primární klíč v oracle

Primární klíč lze přidat při vytváření tabulky nebo jej lze vytvořit až po vytvoření tabulky.
Nejprve se podívejme na vytvoření tabulky

Primární klíč při vytváření tabulky

Může být definován na úrovni sloupců nebo tabulky. Složený Primární klíče jsou definovány pouze na úrovni tabulky. Když oracle vytvoří primární klíč, vytvoří jedinečný index v tomto sloupci v tabulce, aby vynutil omezení primárního klíče.

Nejprve se podíváme na úroveň sloupců

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

Nyní se podívejme na úroveň tabulky

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

Můžeme zadat vlastní název omezení primárního klíče také pomocí klauzule přidat omezení, jak je znázorněno níže

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

Tabulku s primární lze reprezentovat jako Diagram

Změnit tabulku Přidat primární klíč

Podívejme se, jak přidat Primární po vytvoření tabulky

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

Při přidávání primárního klíče můžeme zadat vlastní názvy

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 vytvořit složený primární klíč v oracle

Nyní se podíváme na to, jak přidat primární klíč pro složený klíč

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

Můžeme také zadat vlastní název omezení primárního klíče pro složený klíč

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

Složený primární může být reprezentován jako

jak zrušit primární klíč v oracle

Primární klíč můžeme zahodit pomocí níže uvedeného příkazu. Můžeme použít drop primární klíč nebo drop constraints

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 povolit/zakázat omezení primárního klíče

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 přidat primární klíč pomocí indexu

Když oracle vytvoří primární klíč, vytvoří jedinečný index v tomto sloupci v tabulce, aby vynutil omezení primárního klíče. Pokud však tabulka obsahuje index před přidáním primárního klíče, může Oracle použít tento index také pro omezení primárního klíče. Oracle může vynutit omezení primárního klíče jak u jedinečných, nejedinečných, tak u složených indexů. Oracle použije index v závislosti na již existující tabulce indexů. Můžeme také použít použití indexové klauzule v době vytvoření primárního klíče, také pokud chceme vynutit omezení pomocí konkrétního indexu

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

I když v tomto dřívějším prohlášení nepoužíváme použití indexu, oracle bude mít stále stejný nejedinečný index pro vynucení omezení primárního klíče

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 upravit primární klíč v oracle

Nemůžeme jen upravit hodnotu primárního klíče. budeme muset odstranit starý klíč a vytvořit nový primární. Pokud máme omezení cizího klíče, která na ně odkazují. pak je musíme nejprve zahodit a zahodit primární klíč a znovu vytvořit nový primární klíč

jak automaticky zvýšit primární klíč v oracle

S 12c máme dva snadné způsoby, jak implementovat automatické zvýšení primárního klíče

Sloupce identity
V Oracle Database 12c můžeme definovat sloupce tabulky pomocí klíčového slova SQL IDENTITY, což je klíčové slovo SQL American National Standards Institute (ANSI). Které jsou automaticky inkrementovány v okamžiku vložení (jako v 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)
);

Pořadí jako výchozí hodnota
S Oracle Database 12c můžeme přímo přiřadit sekvenci nextval jako výchozí hodnotu pro sloupec, takže již nemusíte vytvářet spouštěč k naplnění sloupce další hodnotou sekvence, stačí ji deklarovat pomocí definice tabulky. Jde o jakousi funkci automatického přírůstku pro sloupec v oracle, stejně jako 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 přejmenovat primární klíč v oracle

Omezení primárního klíče můžeme snadno přejmenovat pomocí alter table rename sql. To nemá vliv na zpracování a cizí klíč

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 

Také čte
Check Constraint v Oracle:Oracle Check Constraint se používá k vynucení pravidel integrity založených na logických výrazech, jako jsou porovnávání. Kontrolní podmínka musí vracet hodnotu true nebo false
Omezení Not Null v Oracle:
Funkce NVL2 v Oracle:Naučte se používat funkci NVL2 v Oracle s příklady
alter table upravit sloupec oracle
https://en.wikipedia.org/wiki/Primary_key

Doporučené kurzy

Zde je pěkný kurz Udemy pro Oracle SQL
Oracle-Sql-Krok za krokem:Tento kurz pokrývá základní sql, spojení, vytváření tabulek a úpravu jejich struktury, vytváření zobrazení, sjednocení, sjednocení – vše a mnoho dalších věcí. . Skvělý kurz a kurz, který musíte mít pro začátečníky SQL
Úplný certifikační kurz Oracle SQL :Toto je dobrý kurz pro každého, kdo chce být Job připravený na vývojářské dovednosti SQL. Pěkně vysvětlený kurz
Oracle SQL Developer:Základy, tipy a triky :Vývojářský nástroj Oracle Sql používá mnoho vývojářů. Tento kurz nám poskytuje triky a lekce, jak jej efektivně používat a stát se produktivním vývojářem sql
Oracle SQL Performance Tuning Masterclass 2020 :Ladění výkonu je jednou z kritických a nejvyhledávanějších dovedností. Toto je dobrý kurz, jak se o tom dozvědět a začít s laděním výkonu SQL


  1. Vypočítejte decil z frekvence v MySQL

  2. SQL Server:dynamické pivotování přes 5 sloupců

  3. Nulové zablokování SQL podle návrhu – nějaké vzory kódování?

  4. Jaký je výchozí název omezení v Oracle?