SQLServer2005外键约束和级联删除
来源:互联网 发布:android需要看java书籍 编辑:程序博客网 时间:2024/04/28 19:15
表T_Device:
DeviceID(主键)
TypeID(外键,引用到T_Type表的TypeID字段)
表T_Type:
TypeID(主键)
如图:
在表设计器里面T_Device表的TypeID字段右键单击,弹出菜单上选择关系,如图:
在弹出的外键关系对话框中的INSERT和UPDATE规范中
更新规则:层叠(默认为无操作)
删除规则:层叠(默认为无操作)
可以实现级联操作
如图:
这时删除表T_Type表中的一条记录,会自动删除T_Device表中对应的记录集,例如如下关系:
T_Device:
DeviceID TypeID
1 3
2 1
3 1
4 2
5 1
T_Type:
TypeID
1
2
3
删除T_Type表中TypeID为1的记录的时候,T_Device表中的对应的TypeID为1的记录集都会被删除。
此前的错误理解:
删除T_Device表中的一条记录会对应删除T_Type表中对应的记录,例如,删除T_Device表中TypeID为3的那条记录,会级联删除T_Type表中的TypeID为3的记录。
这种理解的错误在于,如果删除T_Device表中TypeID为1的一条记录(如语句delete from table T_Device where DeviceID = 2),那么如果对应的T_Type表中的TypeID为1的记录被删除了,则T_Device表中DeviceID为3和5的记录对应的TypeID就失效了,这样破坏了外键关联的正确性。
这种理解错误的根源在于没有搞清楚外键两边谁是引用,谁是实体,也没有搞清楚级联删除的意义在于删除实体的时候级联的删除其所有引用的问题。
在上述例子中对于T_Device表来讲,T_Type表中的记录为实体,T_Device表中的TypeID字段为引用。
另外,外键约束保证了数据的逻辑完整性,级联操作只适用于主表(或被引用表)的删除(delete)和更新(Update)操作,
不适用于从表(或引用表)的插入(Insert)操作,因此不要想象如下代码可以被执行:
insert into T_Device values(1,3);
如果认为在T_Device表中插入一条记录的同时,在T_Type表中会插入相应的被关联到T_Device表的记录是不对的,因为如果再执行insert into dev values(2,3);会如何呢?T_Type表中难道会存在两条TypeID为3的记录吗,这样违背了主键唯一性,因此做插入操作只能是先插入主表(或被引用表),然后插入从表(引用表)。
- SQLServer2005外键约束和级联删除
- SQLServer2005外键约束和级联删除
- SQLServer2005外键约束和级联删除
- 外键约束 级联删除
- mysql的外键约束级联修改和删除整理
- 数据库__SQL的主键和外键约束_级联更新_级联删除
- 外键约束失效--级联更新删除
- sqlserver2005级联删除
- 外键约束和级联操作
- SQL与ORACLE的外键约束-级联更新和删除
- SQL与ORACLE的外键约束-级联删除
- SQLSERVER 外键约束 以及它的级联删除
- SQL与Oracle数据库外键约束中的级联删除
- Yii2.0 外键约束与数据级联删除
- SQLServer2005设置级联删除、级联更新
- SQLServer2005设置级联删除、级联更新
- Oracle外键级联删除和级联更新
- Oracle外键级联删除和级联更新
- zju1151
- Impala源代码分析(3)-backend查询执行过程
- 性能优化再议
- 兔子的窝
- Address already in use: JVM_Bind(端口冲突)
- SQLServer2005外键约束和级联删除
- 代码片段1
- 离散数学学习笔记1
- 1071. Speech Patterns (25)
- Why my application crashes on process termination when file sinks are used?
- How To Make a Simple iPhone Game with Flash CS5
- 陈利人 面试题 对于一个n位正整数a,去掉其中任意k(k<=n)个数字后,剩下的数字按原次序排列可以组成一个新的正整数。设计一个删数算法,使得剩下的数字组成的正整数最小。
- 设计模式OO基础原则模式
- 1.范磊的C++从新手到高手的章节