--sql约束
/*
(1)提供语义定义完整性约束条件的机制
实体完整性:主键、非空
????参照完整性:外键
????用户自定义完整性:check、触发器
(2)提供完整性检查方法
????一般在:Insert、Update、Delete执行后开始检查,及事务提交后开始检查。
(3)违约处理
????拒绝(no action)
????级连(级联 Cascade)
?
*/
/*
几种约束
非空约束(NOT NULL Constraint )
主键约束(Primary Key Constraint)
外键约束(Foreign Key Constraint)
唯一性约束(Unique Constraint)
检查约束(Check Constraint)
默认值约束(Default Constraint)
?
*/
?
--主键约束
--【例1】实体完整性约束。
CREATE TABLE student1 (
????sno char (9) PRIMARY key , --//列级约束
????sname varchar (10) ,
????ssex char (2) ,
????sage int NULL ,
????sdept char (10) ) --,
--或 PRIMARY key(sno)) --//表级约束
?
--表级约束
CREATE TABLE sc1 (
????sno char(9) ,
????cno char(3) ,
????grade int,
primary key(sno,cno) -- //表级约束
)
?
?
--参照完整性定义
--Foreign key(列名) references table_name(列名)
--注意要参考的列应该和被参考列的长度,数据类型相同
sp_help course;
sp_help student;
--【例2】参照完整性实例 (列级、表级均可)。
CREATE TABLE sc2 (
????sno char(9),
????cno char(4),
????grade int ,
primary key(sno,cno) ,
foreign key(cno) references course(cno),
foreign key(sno) references student(sno)
);
?
?
--测试约束
CREATE TABLE sc3 (
????sno char(9) ,
????cno char(4) ,
????grade int ,
primary key(sno,cno) ,
foreign key(sno) references student(sno)
on delete no action --当删除student的记录的时候 会失败
on update cascade --但更新student的记录时 sc3表中的记录也会更新
) ;
--恰当使用级联更新和级联删除 方便数据库在更新时的操作;
insert into student(sno) values(‘2014019‘);
insert into sc3 values(‘2014019‘,‘001‘,100);
?
?
delete from student where sno=‘2014019‘;
update student set sno=‘122222‘ where sno=‘2014019‘;
?
select * from sc3;
--在删除该约束后就可以成功删除了
--当你不给约束起名字的时候 DBMS会自动给该约束起一个名字
--sp_help sc3;
alter table sc3 drop FK__sc3__sno__398D8EEE;
?
drop table sc3;