什么是数据库的完整性
数据库的完整性是指数据库的任何状态变化都能反映真实存在的客观世界的合理状态,数据库中的数据应始终保持正确且合理的状态。即数据正确性和相容性。
各类完整性约束
1.实体完整性约束
可以用PRIMARY KEY 定义一个表的主码,这就可以实现实体完整性,即主键不为空且唯一。在定义了实体完整性后,当插入或修改操作使得表中属性的取值违反实体完整性约束(即主码值不唯一或主码的各个属性中有一个为空)时,系统一般采用拒绝执行方式处理
2.参照完整性约束
可以用FOREIGN KEY 定义一个表的外码,用REFERENCES指明外码参照哪张表的主码,这样就实现了参照完整性。在定义参照完整性约束时,参照表的外码的列数与被参照表主码的列数必须相同,并且对应列的数据类型也必须相同,但是外码的列名与被参照表的主码列名不必相同。
违约的处理方式
(1)拒绝(NO ACTION)执行,即不允许执行该操作,一般为默认违约处理方式。
(2)级联(CASCADE)操作,表示当删除或修改被参照表的元组造成参照表中某些元组的外码违反了参照完整性约束,则系统会自动删除或修改参照表中所有违反参照表中的元组
(3)设置为空(SET NULL),表示当删除或修改被参照表的一个元组造成了参照表某些元组的外码违反了参照完整性约束,则系统会自动将参照表中所有违反参照完整性约束的元组的外码设置为空值。
3.用户自定义完整性约束
常见的是NOT NULL非空约束,CHECK约束,UNIQUE约束等。
表中约束的创建
在创建表的时候有两种创建约束的方法,一种是直接在数据类型后面写明约束,一种是在最后面写约束。
例如创建一个主键约束,
create table test( eno int PRIMARY KEY name varchar(10) )
create table test( eno int, name varchar(10) CONSTRAINT pk_eno PRIMARY KEY (eno) )
若是表已经建好了,需要添加或者删除约束,需要用到ALTER TABLE 语句来操作。
例如增加一个CHECK 约束,职称不是教授的教师必须在60岁退休。
ALTER TABLE T ADD CONSTRAINT ck_T CHECK(Title != '教授' AND Tage<60 OR Title ='教授')
这里注意下,NOT NULL 约束不是用ADD CONSTRAINT 语句了,用ALTER TABLE ALTER COLUMN 了。
ALTER TABLE test ALTER COLUMN eno int not null
删除约束的语句
ALTER TABLE T DROP CONSTRAINT ck_T