SQL Server约束

约束可分为3类:实体约束、域约束和参照完整性约束。

实体约束有:CHECK约束、规则、默认值和DEFAULT约束。域约束用于处理一个或多个列。

域约束有:主键约束和唯一约束(替换键)。实体约束是关于每一行。

参照完整性约束有:外键约束。如果某列的值需要与其他列(可不在同一表中)相匹配,则就需要创建参照完整性约束。

一、键约束

键约束有主键约束、外键约束和替换键约束。

1.主键约束

主键是每一行的唯一标识符,必须包含一个唯一值,因此其不能为NULL。每一表最多只能有一个主键。实现主键的方法有:

1)CREATE TABLE命令创建主键

这种方法是在创建表时,在作为主键的列的后面添加上:PRIMARY KEY。也可以在最后单独一行设置键:CONSTRAINT PK_EmployeeID PRIMARY KEY(EmployeeID);

2)ALTER TABLE命名创建主键

这种方法是在表存在后,使用ALTER命名来对表设置主键。其形式如下:

ALTER TABLE myTable ADD CONSTRAINT PK_EmployeeID PRIMARY KEY(EmployeeID);

2.外键约束

        设置了外键约束后,引用表就和被引用表形成了依赖关系。插入引用表的记录,外键列要么必须与被引用表中有匹配项,要么外键列为NULL。被应用表的被引用列必须为主键或唯一约束。其定义形式:

sd

CASCADE:级联更新和删除。ON DELETE CASCADE:如果父表删除某行,那么外键表与该行相匹配的行也将被删除。ON UPDATE CASCADE:如果父表更新某行,那么外键表与该行相匹配的相关联的外键也将更新。

ON ACTION:如果存在级联,并试图删除父表,那么会出现错误,并回滚到DELETE或UPDATE语句。

SET NULL:表示如果更新或删除父表,那么子表运用NULL来填充相关行的相关外键。

SET DEFAULT:如果更新或删除父表,那么子表运用默认值外填充相关行的相关外键。

1)在已存在表上创建外键

其形式如下:ALTER TABLE myTable ADD CONSTRAINT FK_EmployeeID FOREIGN KEY (EmployeeID) REFERENCES yourTable(EmployeeID);

2)创建表时创建外键

在需要设置外键的列添加:FOREIGN KEY REFERENCE yourTable(EmployeeID);

注意:如果外键要引用的表时自己,那么可以省略FOREIGN KEY。

3)级联

如果需要设置级联动作,可以在设置外键时加上ON子句来设置级联的方式,默认情况下为ON ACTION操作。

3.唯一约束

唯一约束又称替换键,必须为唯一值。在一个表中,可以有多个唯一约束。其不会防止NULL值,是否可以为NULL,取决于NULL选项设置。但只能有一个NULL值。

1)创建表时设置唯一约束

通过在列后面添加:UNIQUE

2)为已建立的表添加唯一约束

其形式如下:ALTER TABLE myTable ADD CONSTRAINT AK_Emdf UNIQUE (myID);

二、CHECK 约束

CHECK约束用于特定的列,几乎所有用于WHERE的条件都可以用于CHECK约束。其形式如下:

ALTER TABLE myTable  ADD CONSTRINT CN_sdfsd  CHECK (DataID<100);

三、DEFALUT约束

该约束用于:在插入一行时,对于一个定义了默认约束的列没有提供相应的数据时,就使用默认值填充。可以有多个DEFAULT约束。

1)在创建表时定义约束

这种情况在需要定义DEFAULT约束的列后面添加:DEFAULT 默认值

2)在已建立表添加DEFAULT约束

其形式与前面有所不同,要添加一个FOR关键字,形式:ALTER TABLE myTable ADD CONSTRINT CN_sdfs DEFALUT 100 FOR myID

四、禁用约束

SQL Server中只能禁用外键约束和CHECK约束,不能禁用主键约束和唯一约束。

如果使用CHECK约束,而不想将这个约束适用于已经存在的数据,那么可以使用选项:WITH NOCHECK。

eg: ALTER TABLE myTable

        WITH NOCHECK

        ADD CONSTRINT CN-sdfds

        CHECK

        (........)

如果需要禁用CHECK约束,形式如下:

ALTER TABLE myTable

        NOCHECK

       CONSTRINT CN_sdfds

启用约束,形式如下:

ALTER TABLE myTable

        CHECK

       CONSTRINT CN_sdfds

显示约束的状态:EXEC sp_helpconstrint myTable

五、规则和默认值

        规则和默认值与约束有本质上的区别:约束是表的特征,本身没有存在形式,而规则和默认值是表或自身的实际对象,本身存在。约束是和表一起定义的,而规则和默认值是单独定义的,然后绑定到表上的。规则和默认值还可以绑定到数据类型上。

1.规则

        规则和CHECK约束比较相像,但规则只能作用一个列,也就是说它不知道和其他列的关系。例如:列1<列2 这种的形式的约束条件就不适用于规则,因为这涉及到两个列。像 列1 IN(’c‘,'d')这种形式适用于CHECK约束

创建规则: CREATE RULE myRule

                     AS  @Salary>0

        绑定规则存储过程:sp_bindrule <'rule'>,<'object_name'>,<'futureonly_flag'>   其中rule为需要绑定的规则,object_name为需要绑定到的列或数据类型,futureonle_flag为适用于数据类型摸了关闭。

绑定规则:EXEC sp_bindrule 'myRule','myTable.Salary'

在某列中移除规则:EXEC sp_unbindrule 'myTable.Salary'

删除规则:DROP RULE <rulename>

2.默认值

其与DEFALUT相似,区别同于规则和默认值。

创建默认值:CREATE DEFAUT <default_name>

                       AS <default_value>

绑定:sp_bindefalut

移除:sp_unbindefalut

删除默认值:DROP DEFALUT <defalut_name>

查看哪些表适用了规则和默认值,调用存储过程sp_depends:EXEC sp_depends <object_name>

六、区别

sd

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值