以下文章主要是介绍在SQL Server使用检查约束来验证数据的实际操作步骤,以及对其在实际操作中要用到的一些事项的描述,下面的文章就是对SQL Server使用检查约束来验证数据的实际操作步骤的相关内容的具体介绍。
什么是检查约束?
检查约束是一个规则,它确认一个SQL Server表中某条记录中的数据可接受的字段值。检查约束帮助执行域完整性。域完整性定义了一个数据库表中字段的有效值。检查约束可以验证一个单独字段或一些字段的域完整性。你对一个单独的字段可以有多个检查完整性。假如被插入或更新的数据违反了一个检查约束,那么数据库引擎将不答应这个插入或更新的操作发生。
创建检查约束
1 创建字段级别的检查约束
- CREATE TABLE CHECKTABLE(
- pid INT PRIMARY KEY,
- cname VARCHAR(500) NOT NULL,
- age INT,
- CHECK(age>0)
- )
这是一个字段级别的约束。这个检查约束只答应age字段大于0。当我的表创建之后,这个CHECK约束也将被创建,并被赋予一个系统生成的约束名称。
假如你想在一个CREATE TABLE操作期间命名你的检查约束,那么你可以运行下面的代码:
- CREATE TABLE CHECKTABLE(
- pid INT PRIMARY KEY,
- cname VARCHAR(500) NOT NULL,
- age INT,
- CONSTRAINT CK_CheckTable_Age CHECK(age>0)
- )
一个检查约束表达式可以有多个条件。下面是一个例子,它显示了一个有多个条件的检查约束:
- CREATE TABLE CHECKTABLE(
- pid INT PRIMARY KEY,
- cname VARCHAR(500) NOT NULL,
- age INT,
- CONSTRAINT CK_CheckTable_Age CHECK(age>0 AND age<100)
- )
SQL Server使用检查约束来验证时假如你想创建一个表级别的检查约束,那么你可以运行下面的代码:
- CREATE TABLE CHECKTABLE(
- pid INT PRIMARY KEY,
- cname VARCHAR(500) NOT NULL,
- age INT,
- sex BIT,
- CHECK(age>0 AND age<100 AND sex IN (0,1))
- )
有时,在你设计和创建了一个表后,你想对一个表添加一个检查约束。这可以通过使用ALTER TABLE 语句来完成:
- ALTER TABLE CHECKTABLE
- WITH NOCHECK ADD CONSTRAINT CK_CheckTable_Sex
- CHECK (sex IN (0,1));
- ALTER TABLE CHECKTABLE
- WITH NOCHECK ADD CONSTRAINT CK_CheckTable_Sex
- CHECK (sex IN (0,1) AND cname IN ('zy','zs'));
你可以使用一个单独的ALTER TABLE语句来一次添加多个检查约束到你的表中:
- ALTER TABLE CHECKTABLE
- WITH NOCHECK ADD CONSTRAINT CK_CheckTable_Sex
- CHECK (sex IN (0,1)),
- CONSTRAINT CK_CheckTable_Sex
- CHECK (cname IN ('zy','zs'));
比较特别是的,字段中的NULL值可能答应你输入数据到你的数据库中,而这并不满足你的需求。
- ALTER TABLE CHECKTABLE
- WITH NOCHECK ADD CONSTRAINT CK_CheckTable_Sex
- CHECK (sex IN (0,1)),
- CONSTRAINT CK_CheckTable_Sex
- CHECK (cname IN ('zy','zs'));
针对该约束,INSERT INTO CHECKTABLE(pid,cname,age,sex) VALUES(1,NULL,12,1) 该SQL语句是起作用的。这是因为NULL值用在比较操作中时,它被当作UNKNOWN。因为UNKNOWN不是FALSE,所以没有违反检查约束。因此,当你编写你的检查约束时,你需要对需要拒绝包含NULL值的地方很谨慎。上面的代码应该改为:
- ALTER TABLE CHECKTABLE
- WITH NOCHECK ADD CONSTRAINT CK_CheckTable_Sex
- CHECK (sex IN (0,1)),
- CONSTRAINT CK_CheckTable_Sex
- CHECK (cname IS NOT NULL AND cname IN ('zy','zs'));
结论
通过SQL Server使用检查约束,你可以确保你的数据库只包含通过了约束的数据。这使得你可以让数据库引擎控制你的数据验证。这么做将使得你的应用程序不需要在每个你希望插入一条记录或更新一条记录到一个表中的地方都写数据验证规则的代码。检查约束是执行数据验证的一个简洁方法。