完整性约束语法定义
Posted beliss
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了完整性约束语法定义相关的知识,希望对你有一定的参考价值。
语法说明:
[]表示可选,{|}表示选其中一个
外键:参照表的列名,外键中的所有列值在引用的列中必须全部存在,外键可以只引用主键和替代键(unique 约束的字段),不能引用被参照表中随机的一组列,被参照表中参照的列的值必须是唯一的。
父表名:外键所参照的表名,如:course为参照表,teacher表为被参照表或父表。
父表列名:被参照表的列名。
On delete | update:可以为每个外键定义参照动作,参照动作包含两个部分,第一部分指定这个参照动作应用哪一条语句,有update和delete,第二部分指定采取哪个动作,有restrict、cascade、set null、 no action和set default。
Restrict:当要删除或更新父表中被参照列上在外键中出现的值时,拒绝对父表的删除或更新操作。
Cascade:当父表删除或更新行时,自动删除或更新子表中匹配的行。
Set null:当父表删除或更新行时,设置子表中与之对应的外键列为null,如果外键列没有指定not null关键字,就是合法的。
No action:不采取动作,但如果有一个相关的外键值在父表中,删除或更新该值将不被允许,此时和Restrict命令一样的功能。
Set default:作用和set null一样,但set default 是指定子表中外键值为默认值。
如果没有指定动作,delete和update默认使用restrict.
注意:外键参考约束只能用于InnoDB的存储引擎中。
创建外键的语法如下:
如:FOREIGN KEY (ctno) REFERENCES teacher(tno));ctno为course表的外键。一般来说外键为被参照表的主键,此处引用teacher表的tno
(1)在创建表时同时创建外键。如:
CREATE TABLE course (
cno CHAR(4) PRIMARY KEY NOT NULL,
cname VARCHAR(40) UNIQUE,
cperiod INT,
credit DECIMAL(3,1),
ctno CHAR(4) ,
CONSTRAINT fk_teacher_course FOREIGN KEY (ctno) REFERENCES teacher(tno)
On delete restrict);
(2)如果表已经创建好,则用alter命令添加。如:
Alter table course add constraint fk_teaher_course foreign key (ctno) references teacher(tno) on delete restrict;
二、check完整性约束
语法格式:
Check(表达式);
表达式:指定需要检查的条件,在更新插入数据的时候,会检查数据是否满足条件。
如:学生信息表studentinfo中性别只有’男’和’女’.
(1)创建表的时候指定check约束
Create table studentinfo(cno char(10),sex char(2) not null check (sex in (‘man’,’woman’));
(2)如果表已经建立好,则用alter命令添加
Alter table studentinfo add constraint ck_name check (sex in (‘man’,’woman’));
Check 完整性约束可以同时定义多个,中间用逗号分开。
目前mysql版本中,check完整性约束还未被强化,即mysql只会分析,但不会强制限制,相当于注释。
一、在上次建好的表中添加外键约束条件:
1,对product表中catid列引用了category表中的catid,请为product表中catid列创建外键,保证当要删除category表中的catid列的值时,如果product表中catid列还有该值的记录时,拒绝对category表的删除操作。
Alter table product add constraint fk_product_category foreign key (catid) references category(catid) on delete restrict;
2.对orders表中userid列引用了account表中的userid,请为orders表中userid列创建外键,保证当要删除和更新account表中的数据时,只要orders表中还有该客户的订单,就拒绝对account表进行删除和更新操作。
Alter table orders add constraint fk_orders_account foreign key(userid) references account(userid) on delete restrict on update restrict;
3.对lineitem表中itemid列引用了product表中的productid,请为lineitem表中itemid列创建外键,保证当要删除和更新product表中的商品编号时,自动删除或更新lineitem表中匹配的行。
Alter table lineitem add constraint fk_lineitem_product foreign key (itemid) references product(productid) on delete Cascade;
4,对lineitem表中orderid列引用了orders表中的orderid,请为lineitem表中orderid列创建外键,以保证当要删除orderid表中的订单编号时,自动删除lineitem表中匹配的行。
Alter table lineitem add constraint fk_lineitem_orders foreign key (orderid) references orders(orderid) on delete Cascade;
5,对account表中sex列添加check约束。
Alter table account add constraint ck_name check (sex in (‘man’,’woman’));
二、为订单表orders中的orderdate字段建立索引。
建立索引:create index aaa on orders(orderdate);
查看show index from orders;
查询结果中table为表名,key_name为索引名,Column_name为列名
以上是关于完整性约束语法定义的主要内容,如果未能解决你的问题,请参考以下文章