数据库完整性-约 束 1 PRIMARY KEY约束 例如,下面的SQL语句创建一个名为student的表,其中指定student_number为主键: USE test GO CREATE TABLE student (sutdent_number int PRIMARY KEY, student_name char(30)) GO 2 FOREIGN KEY约束 例如,下面就是一个使用FOREIGN KEY约束的例子: CREATE TABLE product (product_number int, student_number int FOREIGN KEY REFERENCES student(student_number) ON DELETE NO ACTION) GO 3 UNIQUE约束 例如,下面的SQL语句创建了一个test2表,其中指定了c1字段不能包含重复的值: USE test GO CREATE TABLE test2 (c1 int UNIQUE, c2 int) GO INSERT test2 VALUES(1,100) GO 如果再插入一行: INSERT test2 VALUES(1,200) 4 CHECK约束 例如,下面的SQL语句创建一个成绩(score)表,其中使用CHECK约束来限定成绩只能在0~100分之间: CREATE TABLE score (sutdent_number int, score int NOT NULL CHECK(score>=0 AND score <=100) ) 默认值 .1 在创建表时指定默认值 例如,下面在test数据库中创建一个datetest表,其中c2指定默认值未当前日期: USE test GO CREATE TABLE datetest( c1 int, c2 datetime DEFAULT (getdate()) ) 然后插入一行数据: INSERT datetest(c1) VALUES(1) SELECT * FROM datetest 同样,可以给bookdb数据库中的orderform表中的order_date字段加上默认值: USE bookdb GO ALTER TABLE orderform ADD CONSTRAINT DateDflt DEFAULT getdate() FOR order_date .2 使用默认对象 .2.1 创建默认对象 2.使用CREATE DEFAULT语句 例如,使用下面的SQL语句也可以创建address_default默认对象: USE bookdb GO CREATE DEFAULT address_default AS '无' GO .2.2 绑定默认对象 2.使用sp_bindefault存储过程 例如,上面将address_default默认对象绑定到authors表的address列上的操作过程可以使用下面的SQL语句来完成: USE bookdb EXEC sp_bindefault 'address_default', 'authors.address' .2.4 解除默认对象的绑定 例如,下面的SQL语句解除authors表address列上的默认值绑定: USE bookdb EXEC sp_unbindefault 'authors.address' .2.5 删除默认对象 例如,下面的SQL语句判断是否存在address_default默认对象,如果存在则删除该默认对象: USE bookdb IF EXISTS (SELECT name FROM sysobjects WHERE name = 'address_default' AND type = 'D') DROP DEFAULT address_default GO 规 则 1 创建规则 例如,下面的SQL语句创建一个名为score_rule的规则,限定输入的值必须在0到100之间: USE test GO CREATE RULE score_rule AS @score BETWEEN 0 and 100 而下面创建的规则将输入到该规则所绑定的列中的实际值限制为只能是该规则中列出的值: USE test GO CREATE RULE list_rule AS @list IN ('1997', '1997', '1996') 也可以使用LIKE来创建一个模式规则,即遵循某种格式的规则。例如,要使得该规则指定任意两个字符的后面跟一个连字符和任意多个字符(或没有字符),并以1到6之间的整数结尾,则可以使用下面的SQL语句: USE test GO CREATE RULE pattern_rule AS @value LIKE '__-%[1-6]' 2 绑定规则 例如,下面的SQL语句可以将score_rule规则绑定到score表的score列上: USE test EXEC sp_bindrule 'score_rule', 'score.score' 3 删除规则 例如,要解除绑定到score表的score列上的规则,可以使用下面SQL语句: USE test EXEC sp_unbindrule 'score.score' 例如,要删除规则score_rule,可以使用下面的SQL语句: DROP RULE score_rule