mysql的表完整性和列完整性

完整性约束条件的一般形式:Integrity Constraint  ::=(P,O,A,R)

O:数据集合 约束的对象(列,元组,元祖集合)

P:谓词条件:什么样的约束?

A:触发条件:什么时候检查?

R:响应动作:不满足时怎么办?

Col_constr列约束

一种域约束类型,对单一列的值进行约束

{not null
    [constraint constraintname]  #为约束命名
	{
	    unique               #列值唯一
            primary key          #列为主键
            check(search_cond)   #列值满足条件,条件只能使用列当前值
            references tablename[(colname)]
		[on delete{cascade|set null}]#引用另一表tablename的列colname的值,如有ON DELETE CASCADE 或ON DELETE SETNULL语句,则删除被引用表的某列值v 时,要将本表该列值为v 的记录删除或列值更新为null;缺省为无操作 。
	}
}

示例:

create table student
(
	sno char(8) not null unique,
    sname char(10),
    ssex char(2),
    constraint ctssex check(ssex in ('男','女')),
    sage integer check(sage>=1 and sage<150),
    Dno char(2)
    references dept(Dno) on delete cascade,
    sclass char(6)
);
table_constr表约束

一种关系约束类型,对多列或元组值进行约束

CONSTRAINT constraintname #为约束命名,便于以后撤消
UNIQUE (colname {, colname. . .})  #几列值组合在一起是唯一
PRIMARY KEY (colname {, colname. . .}) #几列联合为主键
CHECK (search_condition) #元组多列值共同满足条件,条件中只能使用同一元组的不同列当前值
FOREIGN KEY (colname {, colname. . .})REFERENCES tablename [(colname {, colname. . .})][ON DELETE CASCADE] }#引用另一表tablename的若干列的值作为外键

示例:

create table student
(
    sno varchar(10),
    sname varchar(8),
    ssex varchar(2),
    sclass varchar(10),
    email varchar(20),
    unique(sno), #插入相同的sno将会报错
    unique(sname,email)#插入sname,email都相同将会报错
)
Create Table Course
 ( 
    Cno char(3) ,
    Cname char(12),
    Chours integer,
    Credit float(1),
    constraint ctcredit check (Credit >=0.0 and Credit<=5.0 ), 
    Tno char(3)
    references Teacher(Tno) on delete cascade,
    primary key(Cno),
    constraint ctcc check(Chours/Credit = 20)
 );

表约束或列约束的撤消或追加

撤消或追加约束的语句是 Alter Table

示例:撤销course表中的主键约束再添加主键约束

alter table clus drop primary key;#删除

alter table clus add primary key(Cno);#添加








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值