1.用户自定义完整性
SQL Server支持的用户自定义完整性主要有NOT NULL(不为空)、UNIQUE(唯一)、NULL(空)、CHECK(检查是否在某一范围之内)。
2.实例
1.定义NULL/NOT NULL约束
CREATE TABLE nation2(/*国家表*/
nationkey INTEGER PRIMARY KEY, /*国家编号*/
name CHAR(25)NOT NULL, /*国家名称*/
regionkey INTEGER REFERENCES region(regionkey),/*地区编号*/
comment VARCHAR(152)NULL /*备注*/
);
2.定义属性的缺省值
定义零件基本表的制造厂的缺省值为,表示其他厂商
CREATE TABLE part2(/*零件基本表*/
partkey INTEGER PRIMARY KEY, /*零件编号*/
name VARCHAR(100), /*零件名称*/
mfgr CHAR(50)DEFAULT '0', /*制造厂*/
brand VARCHAR(50), /*品牌*/
type VARCHAR(25), /*零件类型*/
size INTEGER, /*尺寸*/
container CHAR(10), /*包装*/
retailprice REAL, /*零售价格*/
comment VARCHAR (23) /*备注*/
);
3.定义属性UNIQUE约束
定义地区表的地区名称必须唯一的约束
CREATE TABLE region2(/*地区表*/
regionkey INTEGER PRIMARY KEY, /*地区编号*/
name CHAR(25)UNIQUE, /*地区名称*/
comment CHAR(152) /*备注*/
);
4.使用CHECK
使用CHECK定义订单表中某些属性应该满足的约束
CREATE TABLE orders2(/*订单表*/
orderkey INTEGER PRIMARY KEY,/*订单编号*/
custkey INTEGER,/*顾客编号*/
/*订单状态有中,0表示尚未处理,1表示已经处理*/
orderstatus CHAR(1)CHECK(orderstatus IN('0','1')),/*订单状态*/
totalprice REAL,/*订单总金额*/
orderdate DATE,/*订单日期*/
/*订单优先级有三等,0表示最高,1次之,2表示最低*/
orderpriority CHAR(15)CHECK (orderpriority IN('0','1','2')),/*订单优先级别*/
clerk CHAR(15),/*记账员*/
shippriority INTEGER ,/*运输优先级别*/
comment VARCHAR(79),/*备注*/
);
5.插入orders2中的一条记录,验证是否违反CHECK 约束
INSERT
INTO orders2
VALUES(1,2,'0',200,'2017-11-19','1','lllllll',2,'fast');
SELECT *
FROM orders2;
UPDATE orders2
SET orderpriority='3'
WHERE orderkey=1;
3.注意
任何关系数据库系统都应该支持实体完整性和参照完整性,此外,不同关系数据库根据应用环境的不同,往往还需要一些特殊的条件,用户定义的完整性就是针对某一具体关系数据库的约束条件,它反映某一具体数据必须满足的语义要求,个人认为正是有了用户完整性,数据才会更加严谨,使用起来也会更加方便。