数据库完整性是指对数据库的一致性和准确性强制数据完整性可靠性保证数据库中数据的质量。
数据完整性一般分为域完整性,实体完整性,参照完整性,用户自定义完整性。
域完整性指列数据输入的有效性,又称列完整性,通过CHECK约束、DEFALUT约束、NOT NULL约束、数据类型和规则等实现域完整性。
CHECK约束通过显示输入到列中的值来实现域完整性。
例如:对于stsc数据库score表,grade规定为0分到100分之间,可用CHECK约束表示。
实体完整性要求表中有一个主键,其值不能为空且能唯一地标识对应的记录,又称为行完整性,通过PRIMARY KEY 约束、UNIQUE约束、索引或IDENTITY 属性等实现数据的实体完整性。
例如,对于stsc数据库中student表,stno列作为主键,每一个学生的stno列能唯一地标识该学生对应的行记录信息,通过stno列建立主键约束实现student表的实体完整性。
参照完整性保证主表中的数据与从表中数据的一致性,又称为引用完整性,在SQL Server 2008中,通过定义主键(主码)与外键(外码)之间的对应关系实现参照完整性,参照完整性确保键值在所有表中一致。
主键:表中能唯一标识每个数据行的一个或多个列。
外键:一个表中的一个或多个列的组合是另一个表的主键。
用户自定义完整性不属于其他任何完整性类别的特定业务规则,所有完整性类别都支持用户定义完整性,包括CREATE TABLE 中所有的列级约束和表级约束,存储过程和触发器。
CHECK约束用于对输入列或者整个表中的值设置检查条件,以限制输入值,从而保证数据库的完整性。
A, 使用T-SQL 语句在创建表时创建CHECK约束。
语法格式如下:
CREATE TABLE table_name /*指定表名*/ (column_name datatype { NOT NULL | NULL /*指定为空性*/ | [ DEFAULT co nstraint_expression ] /*指定默认值 | [ CONSTRAINT constraint_name ] CHECK ( logical_expression )] /*CHECK约束表达式*/ }[,…n] [ CONSTRAINT constraint_name ] CHECK ( logical_expression )][, )其中,关键字 CHECK表示 CHECK约束。 logial_expression为 CHECK约束表达式。
例如:在stsc数据库中创建表goods,包含有关域完整性的定义。
USE stsc CREATE TABLE goods ( gid int NOT NULL, /*商品号*/ gname varchar(100) NOT NULL, /*商品名*/ gprice float NOT NULL CHECK(gprice<=500), /*价格*/ gclass varchar(60) DEFAULT 'articles of everyday use', /*类型*/ gamount int NOT NULL, /*数量*/ gdate date NULL, /*上架日期*/ trade_price float NOT NULL /*批发价格*/ )注意:如果在指定的一个月书中涉及多个列,则该约束必须定义为表的约束。
使用ALTER TABLE 的ADD 子句在修改表时创建CHECK约束,其语法格式如下:
ALTER TABLE table_name ADD [<column_definition>] [CONSTRAINT constraint_name] CHECK (logical_expression)例如: 通过修改stsc数据库的goods表,增加批发价格列的 CHECK约束。
USE stsc ALTER TABLE goods ADD CONSTRAINT CK_trade_price CHECK(trade_price<=500)C,使用 T-SQL语句删除 CHECK约束
使用 ALTER TABLE 语句的 DROP 子句删除CHECK约束。其语法格式如下:
ALTER TABLE table_name DROP CONSTRAINT check_name例如:删除stsc数据库的goods表批发价格列的 CHECK约束
USE stsc ALTER TABLE goods DROP CONSTRAINT CK_trade_price
[CONSTRAINT constraint_name] DEFAULT constant_expression [FOR column_name]例如:在stsc数据库中创建st表时建立 DEFALUT约束。
USE stsc CREATE TABLE st ( stno char(4) NOT NULL PRIMARY KEY, stname char(8) NOT NULL, stsex char(2) NOT NULL DEFAULT '男', /* 定义stsex列DEFALUT约束值为'男' */ stbirthday date NOT NULL, specialist char(12) NULL DEFAULT '计算机', /* 定义specialist列DEFALUT约束值为'计算机' */ tc int NULL ) GO