首页 > 代码库 > SQLserver数据的完整性

SQLserver数据的完整性

--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;

SQLserver数据的完整性