第8章数据完整性概念实现数据完整性完整性约束检查触发器数据完整性概念Return数据完整性是指数据的正确性和相容性。如: 每个人的身份证号必须是唯一的人的性别只能是‘男’或‘女’ 完整性控制机制的核心是完整性约束条件实现数据完整性的方法服务器端 1.声明数据完整性 2.编写触发器来实现(当限制列取值范围的约束设计多张表时)客户端用数据库前端开发工具,在应用程序中编写相应代码来保证完整性约束条件的作用对象Return列级约束元组约束关系约束含义数据类型的约束数据格式的约束取值范围或取值集合的约束空值的约束(在定义列时应指明是否允许取空值)元组中各个字段之间联系的约束若干元组之间、关系之间的联系的约束举例1.Sno char(8)2.Sno:201001101?年专业班号序列号 3.学生成绩的取值范围为0~100如:开始日期小于结束日期;订货数量小于等于库存数量如:学号的取值不能重复也不能取值为空数据完整性约束Return实体完整性是用PRIMARY KEY来保证,每个表只能有一PRIMARY KEY 约束且列的取值必须是不重复(UNIQUE)[对有多列构成的主键, 要使这些主键列组合起来取值不重],且不允许空值(NOT NULL)相关约束完整性约束参照完整性是用FOREIGN KEY约束来保证,定义时要注意, 外键引用列必须是有主键约束或唯一值约束相关约束用户定义完整性也称域完整性/语义完整性,限制关系中属性的 取值类型及取值范围相关约束添加主键约束ALTER TABLE 表名 ADD [CONSTRAINT 约束名] PRIMARY KEY (列名[,…n])示例ALTER TABLE 职工表 ADD CONSTRAINT PK_EMP PRIMARY KEY (职工编号)注意:如果使用ALTER TABLE语句为定义好的表添加主键约束,则主键列在定义表时必须有非空约束,否则无法添加主键约束添加唯一值约束ALTER TABLE 表名 ADD [CONSTRAINT 约束名] UNIQUE(列名[,…n])示例ALTER TABLE 职工表 ADD CONSTRAINT UN_EMP UNIQUE (身份证号)复合唯一约束示例ALTER TABLE 职工表 ADD CONSTRAINT UN_Name UNIQUE (au_fname,aulname)注意:UNIQUE用于限制一个IE或者多个列的组合取值不重复,在一个表中可以定义多个UNIQUE约束,约束的列允许有一个空值添加主键约束:alter table 表名 add constraint 主键(形如:PK_表名) primary key 表名(主键字段);添加唯一约束:alter table 表名 add unique key 约束名 (字段);添加外键约束ALTER TABLE 表名 ADD [CONSTRAINT 约束名][ FOREIGN KEY ] (列名) REFERENCES 引用表名 (列名)[ ON DELETE { CASCADE | NO ACTION } ][ ON UPDATE { CASCADE | NO ACTION } ]示例ALTER TABLE 职工表 ADD CONSTRAINT FK_job_idFOREIGN KEY ] (工作编号) REFERENCES 工作表添加外键约束:alter table 从表 add constraint 外键(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);级联引用完整性添加默认值约束ALTER TABLE 表名 ADD [CONSTRAINT 约束名]DEFAULT 常量表达式 FOR 列名示例ALTER TABLE 职工表 ADD CONSTRAINT DF_PHONEDEFAULT FOR 电话注意:只有向表中插入数据时才检查DEFAULT约束每个列只能有一个DEFAULT约束;可以在创建表时定义DEFAULT约束,也可以ALTER TABLE语句在以创建好的表上添加该约束添加列取值范围约束ALTER TABLE 表名 ADD [CONSTRAINT 约束名]CHECK (逻辑表达式)示例ALTER TABLE 职工表 ADD CONSTRAINT CHK_SalaryCHECK (工资 = 800)定义多列取值约束如:限制“最低工资”=“最高工资”。CREATE TABLE 工作表(…最低工资 int,最高工资 int,[…]CHECK(最低工资 = 最高工资),… )注意:多列之间
原创力文档

文档评论(0)