【杂记--约束】

/*--------------------------------------------------------------------------------------
     t-mac 编写整理
       ---学习总结使用
         --MSDN笔记
----------------------------------------------------------------------------------------*/
 

约束分2种:一种是行级约束,只对一行定义约束;

还有一种是表级约束,可以对多列定义同一个约束.如:对组合列定义主键

-----------------------------check约束--------------------------
--1.可将多个check约束用于单个列,也可以使用表级约束一个check约束用于多列.
--2.check约束不接受结算结果为FALSE的值,这样三值逻辑中的unknown就是可以接受的.
 列子:假设对 int 列 MyColumn 应用一个约束,指定 MyColumn 只能包含值 10(即 MyColumn = 10)。
    如果将值 NULL 插入到 MyColumn,数据库引擎将插入 NULL 且不返回错误。
--3.check约束特殊性
  a.如果刚创建的表没有任何行,则此表的任何 CHECK 约束都视为有效.
  

  --这里的表级约束使用函数CheckFnctn() 规定表必须至少含有一行,但是表中无任何行,所以此约束不成立这个时候.
 b.执行 DELETE 语句时不验证 CHECK 约束
 
  --这里插入一行记录 然后删除 本来删除表没有记录 但是DELETE 语句也会成功。
 
----------------------Primary Key约束和Unique约束-------------------------------------
--共同点:1.可保证数据的唯一性
     2.都可以被外表的Foreign Key引用

--不同点:1.一个表只能有一个 PRIMARY KEY 约束,但是可以有多个unique约束
        2.PRIMARY KEY 约束中的列不能接受空值,Unique约束可以接受NULL值

--关于Unique约束可以被外表引用为外键
  ----sc表中的ID引用了s表的id列
  create table s(id int unique,b int)
  create table sc (c int primary key,id int references s(id),d int)
  

----------------------Foreign Key约束----------------------------------------------
--外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列
--可以通过主键控制另外一个表的外键 ,也可以用另外一个表的外键控制主表的主键
 
 PS:不能为具有 INSTEAD OF触发器的表指定级联操作。为表定义级联操作后,就不能向该表添加 INSTEAD OF触发器
 
这里顺便替下级联操作和触发器的触发顺序
1.首先执行由原始DELETE或 UPDATE直接导致的所有级联引用操作。
2.当完成原始级联引用操作后,无论是否更新了任何行,都将激发原始表上的 AFTER触发器。
3.然后激发级联引用操作链中表上的AFTER触发器,但只有已更新或删除了表中的一行或多行时才激发。
4.如果任何原始级联引用操作集生成任何错误,则产生错误,不激发AFTER触发器,并且回滚DELETE或UPDATE。
5.AFTER触发器可执行DELETE UPDATE语句以启动其它级联引用操作链。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值