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
- Nemůžete v něm mít duplicitní hodnoty. tj. měl by být jedinečný v tabulce
- Nesmí mít hodnotu null ani obsahovat prázdné řetězce
- Nemělo by se časem měnit
- V tabulce můžeme mít pouze jeden primární klíč
Doporučení
- Doporučujeme mít jako primární klíč číselné hodnoty, protože je to rychlejší
- 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