1、Foreign key 说明:

foreign key(外键) 建立起了表与表之间的约束关系,让表与表之间的数据更具有完整性和关联性。设想,有两张表A、B,A表中保存了许多电脑制造商的信息,比如联想、戴尔、惠普和华硕,B表中保存了许多多型号的电脑,比如lenovo1,lenovo2,hp1,hp2,hp3,dell1,dell2,asus1,现在如何将两张具有从属关系(每个电脑品牌下都有很多型号的电脑)的表关联起来呢?

我们可以在B表中设置外键。首先我们给这个外键关联关系起个名字xx,外键作为一个字段我们也要给他起个名字xx,一般起A_id,外键的值就是A表中某一个字段的值,一般是id的值。这样做有什么意义呢?

很简单,我们在B表中通过外键字段就可以看出哪些型号的电脑和哪些电脑厂商是相对应的。事实上,计算机程序也是这样把两张表关联起来的。这样两张表便具有了从属关系。这样也带来了一个问题,如果把A表中的某个电脑厂商(比如联想)删除了,B表中的lenovo1,lenovo2便没有了对应的厂商,就处于了游离状态,这是不被允许的,也就是不允许直接把A中的某一行删了。那如果需要删除A表中的某一个电脑厂商的信息怎么办呢?

这里有两种方法:

  1. 禁止外键检测(SET FOREIGN_KEY_CHECKS=0)--> 删除A表中的信息--> 恢复外键检测(SET FOREIGN_KEY_CHECKS=1);
  2. 删除外键(alter table xx drop foreign key xx)--> 删除A表中的信息 --> 新建外键(alter table xx add foreign key(xx) references xx on delete cascade on update cascade );

2、更改有外键约束的表--实例演示

  1. 新建数据库
  2. 新建两张数据表A,B


  3. 向数据表A,B中各写入一条数据

  4. 删除A表中的数据

    错误提示:表manufacturers中的数据具有外键约束,不能删除或者更新
  5. 解决方法一:禁止外键检测,然后删除数据,再恢复外键检测
  6. 解决方法二:删除外键约束,然后删除数据,再恢复外键约束



---------------------------------------------------------------------------------------------

参考资料:

1、mysql foreign key(外键) 说明与实例:http://blog.51yip.com/mysql/1136.html

2、http://www.cnblogs.com/kcher90/archive/2013/02/06/2908109.html

3、主键与外键的关系、级联保存、更新、删除:http://lzd20021683.iteye.com/blog/1293957

4、Mysql删除数据报外键约束解决方法:http://clovemfong.blog.51cto.com/3297559/1239296

更改具有Foreign key约束的表的更多相关文章

  1. SQL PRIMARY KEY 约束\SQL FOREIGN KEY 约束\SQL CHECK 约束

    SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主 ...

  2. SQL FOREIGN KEY 约束

    SQL FOREIGN KEY 约束 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY. 让我们通过一个例子来解释外键.请看下面两个表: "Persons&quo ...

  3. SQL-W3School-高级:SQL FOREIGN KEY 约束

    ylbtech-SQL-W3School-高级:SQL FOREIGN KEY 约束 1.返回顶部 1. SQL FOREIGN KEY 约束 一个表中的 FOREIGN KEY 指向另一个表中的 P ...

  4. SQL Server 2008 R2——TRUNCATE TABLE 无法截断表 该表正由 FOREIGN KEY 约束引用

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  5. sqlserver truncate清空表时候,无法删除 'B表',因为该表正由一个 FOREIGN KEY 约束引用。

    外键: 查询:select object_name(a.parent_object_id) 'tables'  from sys.foreign_keys a  where a.referenced_ ...

  6. SQLServer之修改FOREIGN KEY约束

    使用SSMS数据库管理工具修改FOREIGN KEY约束 1.连接数据库,选择数据表->右键点击->选择设计(或者展开键,选择要修改的外键,右键点击,选择修改,后面修改步骤相同). 2.在 ...

  7. 无法删除对象 '产品',因为该对象正由一个 FOREIGN KEY 约束引用。

    在删除northwindcs表时,发生报错,消息 3726,级别 16,状态 1,第 2 行,无法删除对象 '产品',因为该对象正由一个 FOREIGN KEY 约束引用.此时判断是因为有其他表的外键 ...

  8. 删除提示 FOREIGN KEY 约束引用”

    有时想删除某个表时,提示“无法删除对象 'Orders',因为该对象正由一个 FOREIGN KEY 约束引用”,原因很简单不要急躁,它被其它表的外键引用了,所以无法删除,在此只需先找到哪些表的外键引 ...

  9. SQLServer之FOREIGN KEY约束

    FOREIGN KEY约束添加规则 1.外键约束并不仅仅可以与另一表的主键约束相链接,它还可以定义为引用另一个表中 UNIQUE 约束的列. 2.如果在 FOREIGN KEY 约束的列中输入非 NU ...

随机推荐

  1. 第14月第23天 uitextfield文字下移

    1. http://www.jianshu.com/p/641a0cbcabb0

  2. [USACO]地震 (二分答案+最优比率生成树详解)

    题面:[USACO 2001 OPEN]地震 题目描述: 一场地震把约翰家的牧场摧毁了, 坚强的约翰决心重建家园. 约翰已经重建了N个牧场,现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发 ...

  3. pygame(class类)调用视图的方法

    以下将介绍pygame精灵动画的基础知识,希望对大家有帮助:1.在此,精灵类必须继承pygame.sprite.Sprite并初始化pygame.sprite.Sprite.__init__(self ...

  4. mongodb系列~关于双活状态的mongodb集群

    一简介:说说我们异地双活的集群 二 背景:需要建立异地双活的架构 三 构建 1 需要保证第二机房至少两个副本集DB,这样在第一机房挂掉后才能保证第二机房的可用性 2 集群状态下第二机房启用config ...

  5. 解决kali linux 开启ssh服务后连接不上的问题

    今天在手机端装了NetHunter 想连接PC的kali ,可是怎么都连不上 综合网友的经验: 1.修改sshd_config文件,命令为:vi /etc/ssh/sshd_config 将#Pass ...

  6. 解决 ionic 中的 CORS(跨域)

    译者注:本人翻译功力有限,所以文中难免有翻译不准确的地方,凑合看吧,牛逼的话你看英文版的去,完事儿欢迎回来指正交流(^_^) 如果你通过 ionic serve 或者 ionic run 命令使用或 ...

  7. 边沿检测方法-FPGA入门教程

    本节实验主要讲解FPGA开发中边沿检测方法,我们在设计中会经常用到.这个地方大家一定要理解. 1.1.1.原理介绍 学习HDL语言设计与其他语言不一样,HDL语言设计需要考虑更多的信号的电气特性,时序 ...

  8. 董事局主席董事长总裁首席执行官CEO总裁董事监事区别

    董事长是公司的最大股东:董事长是董事会的主席,一般是企业的所有者,掌握企业的股权并且决定企业的发展策略. 董事局主席通常是在大财团中才会出现,董事局主席管数个董事长,一个大财团涉及很多方面的业务,因此 ...

  9. PhantomJSのメモいろいろ

    提供されるモジュール群は5つ phantom: そのもの FileSystem: ファイルに出力したり.依存ファイルの存在確認したり System: コマンドラインから引数取りたいなら WebPage ...

  10. @RequestBody,@ResponseBody

    @RequestBody 作用: i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上: ...