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. [SDOI2010]古代猪文 (欧拉,卢卡斯,中国剩余)

    [SDOI2010]古代猪文 \(solution:\) 这道题感觉综合性极强,用到了许多数论中的知识: 质因子,约数,组合数 欧拉定理 卢卡斯定理 中国剩余定理 首先我们读题,发现题目需要我们枚举k ...

  2. vue学习一:新建或打开vue项目(vue-cli2)

    vue-cli3的操作参考文章:vue/cli 3.0脚手架搭建,浅谈vue-cli 3 和 vue-cli 2的区别 1.前期准备: node.js环境,安装node npm或者cnpm(npm的淘 ...

  3. mysql 查询优化~sql优化通用

    一 简介:今天我们来探讨下SQL语句的优化基础 二 基础规则: 一 通用: 1 避免索引字段使用函数     2 避免发生隐式转换     3 order by字段需要走索引,否则会发生filesor ...

  4. Dubbo启动时检查

    Dubbo在启动时会检查服务提供者所提供的服务是否可用,默认为True. (1).单个服务关闭启动时检查(check属性置为false) 1).基于xml文件配置方式 <!--3.声明需要调用的 ...

  5. JavaScript对象复制(一)(转载)

    在JavaScript很多人复制一个对象的时候都是直接用"=",因为大家都觉得脚本语言是没有指针.引用.地址之类的,所以直接用"="就可以把一个对象复制给另外一 ...

  6. mysql系列十二、mysql常用hint

    对于经常使用oracle的朋友可能知道,oracle的hint功能种类很多,对于优化sql语句提供了很多方法.同样,在mysql里,也有类似的hint功能.下面介绍一些常用的. 强制索引 FORCE ...

  7. oracle查询重复数据方法

    SQL重复记录查询方法 2008年08月14日 星期四 21:01 SQL重复记录查询 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peop ...

  8. oracle flashback 后主键及索引更改问题

    oracle flashback 后 主键会变为bin开头,如果删除可以采用将sql复制出单独窗口,然后加上“”执行

  9. openwrt 添加luci选项

    刚刚下载的openwrt trunk版本,安装后没有luci选项,如下图 需要添加luci页面选项. 步骤如下: (1)修改配置文件 .config , 将 CONFIG_FEED_luci is n ...

  10. windows2008r2系统破解登录密码方法

    破解windows 2008 r2系统登录密码方法: 1.重启系统,使用windows2008r2安装光盘引导 按住shift+f10 2.切换到d:windows\system32目录(使用cmd. ...