📅  最后修改于: 2020-11-28 13:23:49             🧑  作者: Mango
本章介绍数据库中的各种约束。
为了加强数据库的完整性,定义了一组规则,称为约束。约束允许或禁止列中的值。
在实时数据库活动中,应添加某些限制的数据。例如,在销售数据库中,sales-id或transaction-id应该是唯一的。约束类型为:
约束仅与表关联。它们仅适用于特定表。它们是在表创建时定义并应用于表的。
禁止在表中的一个或多个列中使用空值是一项规则。
句法:
db2 create table (col_name col_type not null,..)
示例:[要创建一个销售表,其中有四列(标识,项目名称,数量,价格),请在所有列中添加“非空”约束,以避免在表中形成任何空单元格。
db2 create table shopper.sales(id bigint not null, itemname
varchar(40) not null, qty int not null,price double not null)
您可以在表中插入值,如下所示:
示例: [错误查询]
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.
使用这些约束,可以唯一地设置列的值。为此,在创建表时将唯一性约束声明为“ not null”约束。
句法:
db2 create table ( 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)
示例:要插入四个具有唯一ID(分别为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)
输出:当您尝试插入具有存在的id值的新行时,它将显示以下结果:
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 ( ,.., primary
key ())
示例:使用“ sid”作为主键创建“ salesboys”表
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”。现在,您正在创建一个新表,该表具有销售员的个人详细信息,并具有名为“ employee”的不同架构和名为“ salesboys”的表。在这种情况下,“ sid”是外键。
句法:
db2 create table ( ,constraint
foreign key ()
reference ()
示例:[使用外键列’sid’创建名为’salesboys’的表]
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 drop unique
句法:
db2 alter table drop primary key
句法:
db2 alter table drop check
句法:
db2 alter table drop foreigh key