Ще започнем с въведение в първичния ключ в oracle и след това ще се потопим в различни заявки за него.
Въведение в първичния ключ
Първичният ключ е колона или набор от колони в таблицата, който уникално идентифицира ред в таблицата.
Свойства на първичния ключ
- Не можете да имате дублиращи се стойности в него. т.е. трябва да е уникален в таблицата
- Не може да бъде нула или да съдържа празни низове
- Не трябва да се променя с течение на времето
- Можем да имаме само един първичен ключ в таблицата
Препоръка
- Препоръчва се да има числови стойности като първичен ключ, тъй като е по-бърз
- Всички таблици трябва да имат първични ключове
Как да добавя първичен ключ в oracle
Първичният ключ може да бъде добавен при създаването на таблицата или може да бъде създаден след създаването на таблицата.
Нека първо проверим за създаване на таблица
Първичен ключ при създаване на таблица
Може да се дефинира на ниво колона или на ниво таблица. Съставните първични ключове се дефинират само на ниво таблица. Когато oracle създава първичния ключ, той създава уникалния индекс на тази колона в таблицата, за да наложи ограниченията на първичния ключ.
Нека първо проверим нивото на колона
Ниво на колона SQL> CREATE TABLE DEPT_MASTER ( dept_nr NUMBER ПРАВИЛЕН КЛЮЧ, dept_name varchar2(100) НЕ NULL, dept_status NUMBER(1,0) NOT NULL, created_at date 2 ); Таблицата е създадена. SQL> desc DEPT_MASTER Име Null? Въведете DEPT_NR NOT NULL NUMBER DEPT_NAME NOT NULL VARCHAR2(100) DEPT_STATUS NOT NULL NUMBER(1) CREATED_AT DATE SQL> изберете index_name от dba_indexes, където table_name='DEPT_MASTER';INDEX_NAME********** SYS_C05INTNAME, изберете CO85232 INDEX_NAME,CONSTRAINT_TYPE от user_constraints, където TABLE_NAME='DEPT_MASTER'; CONSTRAINT_NAME INDEX_NAME CONSTRAINT_TYPE SYS_C00478605 C SYS_C00478606 C SYS_C00478607 SYS_C00478607 P
Сега да видим за ниво на таблица
Ниво на таблица SQL> CREATE TABLE DEPT_MASTER ( dept_nr NUMBER , dept_name varchar2(100) НЕ NULL, dept_status NUMBER(1,0) НЕ NULL, created_at date, PRIMARY KEY ("DEPT_NR")); 2 3 4 5 6 7 Създадена таблица. SQL> изберете index_name от dba_indexes, където table_name='DEPT_MASTER'; INDEX_NAME SYS_C0013850525SQL> изберете CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE от user_constraints, където TABLE_NAME='DEPT_MASTER'; CONSTRAINT_NAME INDEX_NAME CONSTRAINT_TYPE SYS_C00478605 C SYS_C00478606 C SYS_C00478607 SYS_C00478607 P
Можем да дадем персонализирано име на ограничението на първичния ключ също като използваме клауза за добавяне на ограничение, както е показано по-долу
SQL> СЪЗДАВАНЕ НА ТАБЛИЦА 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") ); Таблицата е създадена. SQL> изберете CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE от user_constraints, където TABLE_NAME='DEPT_MASTER'; CONSTRAINT_NAME INDEX_NAME CONSTRAINT_TYPE SYS_C00478609 C SYS_C00478608 C PK_DEPT_NR PK_DEPT_NR P
Таблица с първично може да бъде представена като диаграма
Промяна на таблицата Добавяне на първичен ключ
Нека видим как да добавим Основното след създаване на таблица
CREATE TABLE DEPT_MASTER ( dept_nr NUMBER , dept_name varchar2(100) НЕ НУЛЕВО, dept_status NUMBER(1,0) НЕ NULL, created_at date ); SQL> промяна на таблицата DEPT_MASTER добавяне на първичен ключ ( dept_nr); Таблицата е променена. SQL> изберете CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE от user_constraints, където TABLE_NAME='DEPT_MASTER'; CONSTRAINT_NAME INDEX_NAME CONST SYS_C00485778 C SYS_C00485779 C SYS_C00485780 SYS_C00485780 P
Можем също да дадем персонализирани имена, докато добавяме първичен ключ
SQL> промяна на таблицата DEPT_MASTER добавяне на ограничение DEPT_MASTER_ID първичен ключ ( dept_nr); Таблицата е променена. SQL> изберете CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE от user_constraints, където TABLE_NAME='DEPT_MASTER'; CONSTRAINT_NAME INDEX_NAME CONST SYS_C00485778 C SYS_C00485779 C DEPT_MASTER_ID DEPT_MASTER_ID P
как да създадете съставен първичен ключ в oracle
Сега нека да проверим как да добавим първичен ключ за съставния ключ
СЪЗДАВАНЕ НА ТАБЛИЦА CUSTOMER( CUSTOMER_ID NUMBER(6,0), NAME VARCHAR (20) NOT NULL, AGE NUMBER(6,0) NOT NULL, ADDRESS VARCHAR2(25), PALARY NUMBER(6,0), PRIMARY KEY ( CUSTOMER_ID, ИМЕ) ); SQL> col CONSTRAINT_NAME формат a20 SQL> col INDEX_NAME формат a20 SQL> col CONSTRAINT_TYPE формат a5 SQL> изберете CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE от user_constraints, където TABLE_NAME='CUSTOMER'; CONSTRAINT_NAME INDEX_NAME CONST SYS_C00485772 C SYS_C00485773 C SYS_C00485774 SYS_C00485774 P
Можем също да дадем персонализирано име за ограниченията на първичния ключ на съставния ключ
SQL>СЪЗДАВАНЕ НА ТАБЛИЦА CUSTOMER( CUSTOMER_ID NUMBER(6,0), NAME VARCHAR (20) NOT NULL, AGE NUMBER(6,0) NOT NULL, ADDRESS VARCHAR2(25), SQL> НОМЕР НА ЗАПЛАТА (6,0) , ОГРАНИЧЕНИЕ PK_ПРАВИЛЕН КЛЮЧ НА КЛИЕНТА (КЛИЕНТ_ID, ИМЕ) ); Таблицата е създадена. SQL> изберете CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE от user_constraints, където TABLE_NAME='CUSTOMER'; CONSTRAINT_NAME INDEX_NAME CONST SYS_C00485776 C SYS_C00485775 C PK_CUSTOMER PK_CUSTOMER P
Съставният първичен може да бъде представен като
как да махна първичния ключ в oracle
Можем да пуснем първичния ключ с помощта на командата по-долу. Можем да използваме пускане на първичен ключ или пускане на ограничения
SQL> изберете CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE от user_constraints, където TABLE_NAME='DEPT_MASTER'; CONSTRAINT_NAME INDEX_NAME CONST SYS_C00485778 C SYS_C00485779 C DEPT_MASTER_ID DEPT_MASTER_ID P SQL> промяна на таблицата DEPT_MASTER пускане на първичен ключ; Таблицата е променена.SQL> изберете CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE от user_constraints, където TABLE_NAME='DEPT_MASTER'; CONSTRAINT_NAME INDEX_NAME CONST SYS_C00485778 C SYS_C00485779 CSQL> промяна на таблицата DEPT_MASTER добавяне на ограничение DEPT_MASTER_ID първичен ключ ( dept_nr); Таблица променена.SQL> промяна на таблицата DEPT_MASTER пускане ограничение DEPT_MASTER_ID; Таблицата е променена.SQL> изберете CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE от user_constraints, където TABLE_NAME='DEPT_MASTER'; CONSTRAINT_NAME INDEX_NAME CONST SYS_C00485778 C SYS_C00485779 C
Как да активирате/деактивирате ограниченията на първичния ключ
SQL> alter table DEPT_MASTER активиране на първичен ключ; Таблицата е променена. SQL> промяна на таблицата DEPT_MASTER деактивиране на първичния ключ; Таблицата е променена. SQL> alter table DEPT_MASTER деактивирайте ограничението DEPT_MASTER_ID; Таблицата е променена. SQL> промяна на таблицата DEPT_MASTER разрешаване на ограничение DEPT_MASTER_ID; Таблицата е променена
Как да добавите първичен ключ с помощта на индекс
Когато oracle създава първичния ключ, той създава уникалния индекс на тази колона в таблицата, за да наложи ограниченията на първичния ключ. Но ако таблицата има индекс преди добавянето на първичния ключ, Oracle може да използва този индекс и за ограничения на първичния ключ. Oracle може да наложи ограничения на първичния ключ както за уникални, неуникални, така и за съставни индекси. Oracle ще използва индекса в зависимост от таблицата с индекси, която вече има. Можем също да използваме клауза using index по време на създаване на първичен ключ също, ако искаме да наложим ограничение с помощта на конкретен индекс
SQL> създаване на индекс DEPT_MASTER_IDX на DEPT_MASTER(dept_nr); Индексът е създаден. SQL> промяна на таблицата DEPT_MASTER добавяне на ограничение DEPT_MASTER_ID първичен ключ ( dept_nr) с помощта на индекс DEPT_MASTER_IDX; Таблицата е променена. SQL> col CONSTRAINT_NAME формат a20 SQL> col INDEX_NAME формат a20 SQL> col CONSTRAINT_TYPE формат a5 SQL> / CONSTRAINT_NAME INDEX_NAME CONST DEPT_MASTER_ID DEPT_MASTER_IDX P SYS_C00485779 C4> SYS_C08Дори и да не използваме използването на индекс в това по-ранно изявление, оракулът пак ще има същия неуникален индекс за налагане на ограничения на първичния ключ
SQL> създаване на индекс DEPT_MASTER_IDX на DEPT_MASTER(dept_nr); Индексът е създаден. SQL> промяна на таблицата DEPT_MASTER добавяне на ограничение DEPT_MASTER_ID първичен ключ ( dept_nr); Таблицата е променена. SQL> col CONSTRAINT_NAME формат a20 SQL> col INDEX_NAME формат a20 SQL> col CONSTRAINT_TYPE формат a5 SQL> / CONSTRAINT_NAME INDEX_NAME CONST DEPT_MASTER_ID DEPT_MASTER_IDX P SYS_C00485779 C 8> SYS_C08как да променя първичния ключ в oracle
Не можем просто да променим стойността на първичния ключ. ще трябва да пуснем стария ключ и да създадем новия първичен. Ако имаме ограничения за външен ключ, препращащи към тях. тогава трябва първо да ги пуснем и първичния ключ и да създадем отново новия първичен ключ
как да увеличим автоматично първичен ключ в oracle
С 12c имаме два лесни начина за внедряване на автоматично увеличение за първичен ключ
Колони за самоличност
В Oracle Database 12c можем да дефинираме колони на таблица с SQL ключова дума IDENTITY, която е SQL ключова дума на Американския национален институт по стандартизация (ANSI). Които се увеличават автоматично в момента на вмъкване (като в MySQL).Пример:създайте тест на таблица (идентификационен номер, генериран като ОСНОВЕН КЛЮЧ, име varchar2(100), имейл varchar2(100), парола varchar2(100) първо име varchar2(100) фамилия varchar2(100));Последователността като стойност по подразбиране
С Oracle Database 12c можем директно да присвоим последователност nextval като стойност по подразбиране за колона, така че вече не е необходимо да създавате задействане за попълване на колоната със следващата стойност на последователността, просто трябва да я декларирате с дефиниция на таблицата. Това е нещо като функция за автоматично увеличение за колона в оракул, точно като MySQLПример:създайте последователност tech_test_seq, стартирайте с 1 увеличение с 1 nocycle;създайте тест на таблица (идентификационен номер по подразбиране tech_test_seq.nextval първично име на ключ varchar(30));как да преименувам първичен ключ в oracle
Можем лесно да преименуваме ограниченията на първичния ключ, като използваме alter table rename sql. Това не засяга обработката и външния ключ
CREATE TABLE DEPT_MASTER ( dept_nr NUMBER , dept_name varchar2(100) NOT NULL, dept_status NUMBER(1,0) NOT NULL, created_at date );променете таблицата DEPT_MASTER добавете ограничение DEPT_MASTER_ID първичен ключ ( dept_MASTER_ID първичен ключ); user_constraints, където TABLE_NAME='DEPT_MASTER' и constraint_type ='P';CONSTRAINT_NAME------------DEPT_MASTER_IDALTER ТАБЛИЦА DEPT_MASTER ПРЕИМЕНУВАНЕ НА CONSTRAINT DEPT_MASTER_ID TO DEPT_MASTER_ID_PK_изберете от TABLE_CONSTRAINT_CONSTRAINT_NAME от TABLE_CONSTRAINT_CONSTRAINT 'P';CONSTRAINT_NAME------------DEPT_MASTER_ID_PKI се надявам да ви хареса съдържанието на първичния ключ и да изчисти всички съмнения относно концепцията за първичен ключ. Моля, предоставете обратната връзка и какво още може да се добави в тази публикацияСъщо чете
Ограничение за проверка в Oracle:Ограничението за проверка на Oracle се използва за налагане на правила за цялост, базирани на логически изрази, като сравнения. Условието за проверка трябва да връща true или false
Ограничение Not Null в Oracle:
NVL2 функция в Oracle:Научете как да използвате функцията NVL2 в Oracle с примери
alter table modify column oracle
https://en.wikipedia.org/wiki/Primary_keyПрепоръчани курсове
Ето хубавия курс на Udemy за Oracle SQL
Oracle-Sql-Step-by-step :Този курс обхваща основния sql, присъединяването, Създаването на таблици и промяната на структурата им, Създаване на изглед, Обединение, Обединение - всичко и много други неща . Страхотен курс и задължителен курс за SQL начинаещи
Пълният курс за сертифициране на Oracle SQL :Това е добър курс за всеки, който иска да бъде готов за работа за SQL разработчици. Приятно обяснен курс
Oracle SQL Developer:Основни неща, съвети и трикове :Инструментът за разработчици на Oracle Sql се използва от много разработчици. Този курс ни дава трикове и уроци за това как ефективно да го използваме и да станем продуктивен sql разработчик
Майсторски клас за настройка на производителността на Oracle 2020 г. :Настройката на производителността е едно от критичните и най-търсените умения. Това е добър курс, за да научите за него и да започнете да правите настройка на производителността на sql