完整性约束语法定义

Posted beliss

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了完整性约束语法定义相关的知识,希望对你有一定的参考价值。

语法说明:

[]表示可选,{|}表示选其中一个

外键:参照表的列名,外键中的所有列值在引用的列中必须全部存在,外键可以只引用主键和替代键(unique 约束的字段),不能引用被参照表中随机的一组列,被参照表中参照的列的值必须是唯一的。

父表名:外键所参照的表名,如:course为参照表,teacher表为被参照表或父表

父表列名:被参照表的列名。

On delete | update:可以为每个外键定义参照动作,参照动作包含两个部分,第一部分指定这个参照动作应用哪一条语句,有updatedelete,第二部分指定采取哪个动作,有restrictcascadeset nullno actionset default

Restrict:当要删除或更新父表中被参照列上在外键中出现的值时,拒绝对父表的删除或更新操作。

Cascade:当父表删除或更新行时,自动删除或更新子表中匹配的行。

Set null:当父表删除或更新行时,设置子表中与之对应的外键列为null,如果外键列没有指定not null关键字,就是合法的。

No action:不采取动作,但如果有一个相关的外键值在父表中,删除或更新该值将不被允许,此时和Restrict命令一样的功能。

Set default:作用和set null一样,但set default 是指定子表中外键值为默认值。

如果没有指定动作,deleteupdate默认使用restrict.

注意:外键参考约束只能用于InnoDB的存储引擎中。

创建外键的语法如下:

 如:FOREIGN KEY (ctno) REFERENCES teacher(tno))ctnocourse表的外键。一般来说外键为被参照表的主键,此处引用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为列名

 

以上是关于完整性约束语法定义的主要内容,如果未能解决你的问题,请参考以下文章

数据库原理实验(openGauss)完整性控制

大型数据库——创建约束

MySQL命令大全——完整性约束

数据完整性约束

数据引擎 创建表完整语法,字段类型,约束条件

MySQL约束