Эта глава описывает различные ограничения в базе данных.
Вступление
Для обеспечения целостности базы данных определен набор правил, называемых ограничениями. Ограничения разрешают или запрещают значения в столбцах.
При работе с базой данных в реальном времени данные должны быть добавлены с определенными ограничениями. Например, в базе данных продаж идентификатор продаж или идентификатор транзакции должны быть уникальными. Типы ограничений:
- НЕНУЛЕВОЙ
- уникальный
- Основной ключ
- Иностранный ключ
- Проверьте
- информационный
Ограничения связаны только с таблицами. Они применяются только к конкретным таблицам. Они определяются и применяются к таблице во время создания таблицы.
Объяснение каждого ограничения:
НЕНУЛЕВОЙ
Это правило запрещает нулевые значения из одного или нескольких столбцов в таблице.
Синтаксис:
db2 create table <table_name>(col_name col_type not null,..)
Пример : [Чтобы создать таблицу продаж с четырьмя столбцами (id, itemname, qty, price), добавив ограничения «not null» для всех столбцов, чтобы избежать образования нулевой ячейки в таблице.]
db2 create table shopper.sales(id bigint not null, itemname varchar(40) not null, qty int not null,price double not null)
Вставка значений NOT NULL в таблицу
Вы можете вставить значения в таблицу, как показано ниже:
Пример: [ERRORoneous Query]
db2 insert into shopper.sales(id,itemname,qty) values(1,'raagi',12)
Вывод: [правильный запрос]
DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0407N Assignment of a NULL value to a NOT NULL column "TBSPACEID=5, TABLEID=4, COLNO=3" is not allowed. SQLSTATE=23502
Пример: [Правильный запрос]
db2 insert into shopper.sales(id,itemname,qty,price) values(1,'raagi',12, 120.00) db2 insert into shopper.sales(id,itemname,qty,price) values(1,'raagi',12, 120.00)
Выход:
DB20000I The SQL command completed successfully.
Уникальные ограничения
Используя эти ограничения, вы можете установить значения столбцов уникальным образом. Для этого уникальные ограничения объявляются с ограничением «не ноль» во время создания таблицы.
Синтаксис:
db2 create table <tab_name>(<col> <col_type> not null unique, ...)
Пример:
db2 create table shopper.sales1(id bigint not null unique, itemname varchar(40) not null, qty int not null,price double not null)
Вставка значений в таблицу
Пример: для вставки четырех разных строк с уникальными идентификаторами 1, 2, 3 и 4.
db2 insert into shopper.sales1(id, itemname, qty, price) values(1, 'sweet', 100, 89) db2 insert into shopper.sales1(id, itemname, qty, price) values(2, 'choco', 50, 60) db2 insert into shopper.sales1(id, itemname, qty, price) values(3, 'butter', 30, 40) db2 insert into shopper.sales1(id, itemname, qty, price) values(4, 'milk', 1000, 12)
Пример: вставить новую строку со значением «id» 3
db2 insert into shopper.sales1(id, itemname, qty, price) values(3, 'cheese', 60, 80)
Вывод : при попытке вставить новую строку с существующим значением идентификатора будет показан следующий результат:
DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0803N One or more values in the INSERT statement, UPDATE statement, or foreign key update caused by a DELETE statement are not valid because the primary key, unique constraint or unique index identified by "1" constrains table "SHOPPER.SALES1" from having duplicate values for the index key. SQLSTATE=23505
Основной ключ
Подобно ограничениям уникальности, вы можете использовать ограничения «первичный ключ» и «внешний ключ» для объявления отношений между несколькими таблицами.
Синтаксис:
db2 create table <tab_name>(,.., primary key ())
Пример : для создания таблицы «salesboys» с «sid» в качестве первичного ключа
db2 create table shopper.salesboys(sid int not null, name varchar(40) not null, salary double not null, constraint pk_boy_id primary key (sid))
Иностранный ключ
Внешний ключ — это набор столбцов в таблице, которые должны соответствовать по крайней мере одному первичному ключу строки в другой таблице. Это ссылочное ограничение или ограничение ссылочной целостности. Это логическое правило для значений в нескольких столбцах одной или нескольких таблиц. Это обеспечивает необходимые отношения между таблицами.
Ранее вы создали таблицу с именем «shopper.salesboys». Для этой таблицы первичным ключом является «sid». Теперь вы создаете новую таблицу с личными данными продавца с другой схемой с именем «работник» и таблицей с именем «продавец». В этом случае «sid» является внешним ключом.
Синтаксис:
db2 create table <tab_name>(<col> <col_type>,constraint <const_name> foreign key (<col_name>) reference <ref_table> (<ref_col>)
Пример : [Чтобы создать таблицу с именем ‘salesboys’ со столбцом внешнего ключа ‘sid’]
db2 create table employee.salesboys( sid int, name varchar(30) not null, phone int not null, constraint fk_boy_id foreign key (sid) references shopper.salesboys (sid) on delete restrict )
Пример : [Вставка значений в таблицу первичных ключей «shopper.salesboys»]
db2 insert into shopper.salesboys values(100,'raju',20000.00), (101,'kiran',15000.00), (102,'radha',10000.00), (103,'wali',20000.00), (104,'rayan',15000.00)
Пример : [Вставка значений в таблицу внешнего ключа «employee.salesboys» [без ошибки]]
db2 insert into employee.salesboys values(100,'raju',98998976), (101,'kiran',98911176), (102,'radha',943245176), (103,'wali',89857330), (104,'rayan',89851130)
Если вы ввели неизвестный номер, который не хранится в таблице «shopper.salesboys», он покажет вам ошибку SQL.
Пример : [ошибка выполнения]
db2 insert into employee.salesboys values(105,'rayan',89851130)
Выход:
DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0530N The insert or update value of the FOREIGN KEY "EMPLOYEE.SALESBOYS.FK_BOY_ID" is not equal to any value of the parent key of the parent table. SQLSTATE=23503
Проверка ограничения
Вам нужно использовать это ограничение, чтобы добавить условные ограничения для определенного столбца в таблице.
Синтаксис:
db2 create table( primary key ( ), constraint check (condition or condition) )
Пример : [Создать таблицу emp1 со значениями ограничений]
db2 create table empl (id smallint not null, name varchar(9), dept smallint check (dept between 10 and 100), job char(5) check (job in ('sales', 'mgr', 'clerk')), hiredate date, salary decimal(7,2), comm decimal(7,2), primary key (id), constraint yearsal check (year(hiredate) > 1986 or salary > 40500) )
Вставка значений
Вы можете вставить значения в таблицу, как показано ниже:
db2 insert into empl values (1,'lee', 15, 'mgr', '1985-01-01' , 40000.00, 1000.00)
Отбрасывание ограничения
Давайте посмотрим синтаксис для отбрасывания различных ограничений.
Отбрасывание УНИКАЛЬНОГО ограничения
Синтаксис:
db2 alter table <tab_name> drop unique <const_name>
Отбрасывание первичного ключа
Синтаксис:
db2 alter table <tab_name> drop primary key
Отбросить проверочное ограничение
Синтаксис:
db2 alter table <tab_name> drop check <check_const_name>
Отбрасывание внешнего ключа
Синтаксис: