Учебники

DB2 — ограничения

Эта глава описывает различные ограничения в базе данных.

Вступление

Для обеспечения целостности базы данных определен набор правил, называемых ограничениями. Ограничения разрешают или запрещают значения в столбцах.

При работе с базой данных в реальном времени данные должны быть добавлены с определенными ограничениями. Например, в базе данных продаж идентификатор продаж или идентификатор транзакции должны быть уникальными. Типы ограничений:

  • НЕНУЛЕВОЙ
  • уникальный
  • Основной ключ
  • Иностранный ключ
  • Проверьте
  • информационный

Ограничения связаны только с таблицами. Они применяются только к конкретным таблицам. Они определяются и применяются к таблице во время создания таблицы.

Объяснение каждого ограничения:

НЕНУЛЕВОЙ

Это правило запрещает нулевые значения из одного или нескольких столбцов в таблице.

Синтаксис:

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>  

Отбрасывание внешнего ключа

Синтаксис: