-
外键
- 外键简单实例
-
触发器实现
- 更改设置实现
- 总结
文首
今天给考试系统添加学生信息失败,原因是student与classes表有级联关系,作为从表的student表不能随意添加,这些都学过却还没怎么用过,借这次机会学习一下。
外键
说到级联删除不得不先说一下外键,外键的定义:“如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键;换而言之,如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键则该属性集是关系模式R的外键”。
建立外键的sql语句:
从语法分析也可以看出:外键是一种表之间字段值的引用关系。
主表和从表
主表和从表:以另一个关系的外键作主关键字的表被称为从表,具有此外键的表被称为主表。说白了就是:主表是被引用的表,外表是引用其他表的表。
那么外键有什么作用?外键作用可以说是:保持数据一致性,完整性,关联性,主要目的是控制存储在外键表中的数据。就是当你对一个表的数据进行操作,和他有关联的一个或更多表的数据能够同时发生改变,避免无效或是无用的改变和孤立的数据。
建键原则:
1、 外键字段为主键
2、 所有的键都必须唯一
3、避免使用复合键
4、外键总是关联唯一的键字段
外键约束事件触发。既然有外键约束,当违反约束时会发生什么?我们把它的反应看作事件,一共有四种:
1、级联:当主表更改时,从表跟从更改。
2、不执行任何操作。
3、设置null。
4、设置默认值。
我的看法
这些听着挺玄,我说说自己的看法:主表、从表和外键的定义:我把我的笔记本借给你用,可以把“我”当作是主表、“笔记本”当作外键、“你”当作从表,就是说“你”在使用(引用)“我”的“笔记本”;外键的作用就是:现在你想把我的笔记本卖了扔了送人(增加更新删除等),得看看我允许不允许,我想搬家走人,你不把笔记本还给我,我不能搬;建键原则:借之前首先咱得说好了,我只有这么一台笔记本,你也最好是也只借了我这台笔记本,避免你也借了别人的笔记本,不知道哪个是我的了。事件触发:我说你赶紧把笔记本还给我,你可以选择还给我,可以选择不搭理我等。总而言之,由于这笔记本,“你”和“我”关联起来,这台笔记本怎么样,不能一个人说了算。
简单实例
说了这么多,咱先说个简单的实例:建立两个表t_main和t_branch,并设置外键。语句的意思是t_main中的id是t_branch 的外键。
执行语句,现在我想直接在t_branch中插入一条数据insert into t_branch values(3,'分支表'),提示如下:INSERT 语句与 FOREIGN KEY 约束"FK__t_branch__mainId__4F7CD00D"冲突。该冲突发生于数据库"beidaqingniao",表"dbo.t_main", column 'id'。
我想删除t_main语句drop table t_main,提示如下:无法删除对象 't_main',因为该对象正由一个 FOREIGN KEY 约束引用。
在这两个表中,该外键的作用是,t_main中没有的外键值t_branch不能插入,而t_branch 正在引用t_main所以也不能只先删除t_main,否则t_branch中的数据会被孤立。我觉得,外键对主表的作用更倾向于不能删除,而对从表的作用更倾向于不能随便添加。
级联删除
但是如果想级联删除怎么办?总结出三种办法。
sql语句修改设置:因为默认的外键触发是“不执行任何操作”,所以我们可以使用sql语句更改设置:
意思是从表会跟随主表的改变而改变。
可视化修改:不想写代码,也可以可视化操作,新建数据库关系图,选择主表和从表添加,其关系也会自动添加。选择主表或从表---右键---关系---insert和update规范---级联。如图:
当然也可以使用触发器,触发器的基础知识,欢迎访问我的博客《详解sql中的触发器》
总结
看过的知识不是你的,学过的知识不一定是你的,只有总结、运用后,才能更好的掌握知识,眼高手低的结果就是纸上谈兵。
分享到:
相关推荐
在数据库MySQL中利用外键实现级联删除、更新等方面的内容。有兴趣可以看看。。
sql存在检测、建库、建表、约束、外键、级联删除[文].pdf
sql_存在检测、建库、_建表、约束、外键、级联删除[归类].pdf
主要介绍了MySQL使用外键实现级联删除与更新的方法,详细分析了mysql数据库与表的创建、数据插入、查询以及外链的使用与级联操作相关技巧,需要的朋友可以参考下
LINQ通过外键增加删除数据库主从表的示例, 适合刚刚接触LINQ的人使用. 示例使用VS2008编写, 内置了数据库文件, 直接打开website就可以, 不支持VS2003和VS2005
本文介绍在在MySQL数据库中定义数据表、设置索引、定义外键、级联等操作。
查询一个表的所有外键名称,主键名称,主键列ID,主键列名,外键表ID,外键列ID,外键列名 级联更新,级联删除,索引名称,索引字段名,索引字段位置
2、外键的级联更能扩展 可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。但是 再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SET NULL 和 SET ...
一、外键约束 MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。 外键的使用条件: 1.两个表必须是InnoDB表,...可以使得两张表关联,保证数据的一致性和实现一些级联操作; 外键的定义语法: [CON
JAVA主键和外键详解,详尽的JAVA主键和外键详解,主外键的说明
利用sql server自带的级联删除、级联更新功能,即其外键约束途径 alter table dbo.C add constraint FK_C_A_AID foreign key(AID) references dbo.A(AID) on delete cascade on update cascade go alter table dbo.C...
帮助您学会增加外键,在建表的时候没有加外键在之后加的方法
禁用、启用外键约束和触发器
MySQL 外键
有整个SQL的全面介绍,还有经典的专题,例如:exists的用法,instead of触发器,SQL Server 2005新特性体验,SQL Server 2005性能调优,SQL SERVER中删除重复记录,sql 存在检测、建库、 建表、约束、外键、级联删除...
简要介绍了数据的主键和外键,在实践的生产中主键和外键的作用异常的重要
用于查询某个数据库下所有表的外键约束情况,以便统一分析外键约束是否合理...主要查询出外键的,是否级联删除,级联更新,强制外键约束,强制复制约束始终状态。如想使用别的状态,请自行添加。下载的童鞋别下载错了。
Access中如何建立外键关系,首先建立Course表,Student表,和SC表,建立和删除数据表关系。