您当前的位置: AG亚游集团 > 数据库教程 > MySQL教程 > Mysql外键约束设置[Mysql外键使用详细教程]

Mysql外键约束设置[Mysql外键使用详细教程]

作者:xiaoxiao 来源:未知 发布时间: 2014-07-30 09:45 点击: 次
外键的概念: 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。外键主要用来保证数据

AG亚游集团,  祖马表示,在中非合作论坛成立15周年之际,习主席来到南非共同主持论坛第二次峰会意义重大。感谢中方长期以来对非洲的帮助,特别是不久前在非洲国家抗击埃博拉疫情时给予及时和宝贵援助,感谢中方支持非盟维和能力建设。非洲国家愿在实现《2063年议程》进程中加强同中方密切合作。  

  Abbey大概就是传说中的“童颜巨乳”,因为在她12岁的时候,她的乳房就开始疯狂“膨胀”,胸部比正常的女孩大了好几倍。开什么店比较有市场  总的业务发展情况来看,现在应该说用户还是非常强劲的,每个月用户增长都达到300万以上,同时新的业务增长速度也是非常快的。现在我们新业务的收入已经超过了整个业务收入的20%。同时我们看到这些年,语音的业务是在逐渐下降,新业务的收入是逐年的增长。04年新业务的增加率和增长的数量都远远超过了语音业务。下面看一下新技术对语音业务的影响。

Mysql外键约束设置[Mysql外键使用详细教程]

  外键的概念:

  如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。外键主要用来保证数据的完整性和一致性 。

  Mysql使用外键的条件:

  两个表必须是InnoDB表,MyISAM表暂时不支持外键

  外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立;

  外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;

  创建外键语法:

  [CONSTRAINT [symbol]] FOREIGN KEY

  [index_name] (index_col_name, ...)

  REFERENCES tbl_name (index_col_name,...)

  [ON DELETE reference_option]

  [ON UPDATE reference_option]

  reference_option:

  RESTRICT | CASCADE | SET NULL | NO ACTION

  如果子表试图创建一个在父表中不存在的外键值,InnoDB会拒绝任何INSERT或UPDATE操作。如果父表试图UPDATE或者DELETE任何子表中存在或匹配的外键值,最终动作取决于外键约束定义中的ON UPDATE和ON DELETE选项。InnoDB支持5种不同的动作,如果没有指定ON DELETE或者ON UPDATE,默认的动作为RESTRICT:

  1. CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。

  2. SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这些在外键列没有被设为NOT NULL时才有效。ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支持。

  3. NO ACTION: InnoDB拒绝删除或者更新父表。

  4. RESTRICT: 拒绝删除或者更新父表。指定RESTRICT(或者NO ACTION)和忽略ON DELETE或者ON UPDATE选项的效果是一样的。

  5. SET DEFAULT: InnoDB目前不支持。

  外键约束使用最多的两种情况:

  1)父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败;

  2)父表更新时子表也更新,父表删除时子表匹配的项也删除。

  前一种情况,在外键定义中,我们使用ON UPDATE CASCADE ON DELETE RESTRICT;

  后一种情况,可以使用ON UPDATE CASCADE ON DELETE CASCADE。

  使用案例:

  (1)创建表:

  --

  -- /www5b02phpddt5b02com 原创

  --

  CREATE TABLE IF NOT EXISTS `article` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `category_id` int(11) NOT NULL,

  `name` char(16) NOT NULL,

  PRIMARY KEY (`id`),

  KEY `fk_1` (`category_id`)

  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

  INSERT INTO `article` (`id`, `category_id`, `name`) VALUES

  (1, 1, '文章1');

  CREATE TABLE IF NOT EXISTS `category` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` char(16) NOT NULL,

  PRIMARY KEY (`id`)

  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

  INSERT INTO `category` (`id`, `name`) VALUES

  (1, '分类1');

  创建外键约束:

  ALTER TABLE `article`

  ADD CONSTRAINT `fk_1` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`);

  (2)删除主表category中数据:delete FROM `category` WHERE id=1,会报错:

  #1451 - Cannot delete or update a parent row: a foreign key constraint fails (`test`.`article`, CONSTRAINT `fk_1` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`))

  (3)从表article中,添加不存在的category_id:insert into article(category_id,name) values(2,'分类2') 会报错:

  #1452 - Cannot add or update a child row: a foreign key constraint fails (`test`.`article`, CONSTRAINT `fk_1` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`))

  (4)更改更新删除约束AG亚游集团 www.cuyuansu.net

  --删除外键

  ALTER TABLE article DROP FOREIGN KEY fk_1

  --添加外键

  ALTER TABLE `article` ADD CONSTRAINT `fk_1` FOREIGN KEY ( `category_id` )

  REFERENCES `category` ( `id` )

  ON DELETE CASCADE ON UPDATE CASCADE

  此时如下操作:

  --此时article中的记录也会被删除

  delete from category where id=1;

  --此时article中的category_id也会被更新成3

  UPDATE `test`.`category` SET `id` = '3' WHERE `category`.`id` =2;
分享到:
本文"Mysql外键约束设置[Mysql外键使用详细教程]"由远航站长收集整理而来,仅供大家学习与参考使用。更多AG亚游集团尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 广告合作 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(AG亚游集团). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类AG亚游集团.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4
实弹演练 “网瘾少女”杨幂小宇宙爆发 新华社:中国资本市场的“BATJ梦”该圆了! 韩国地方选举百天倒计时 三大变数左右政局走向 谷歌地图现在允许商家将自己标记为“女性领导” 特朗普的高关税或引发贸易战 美国还会加入CPTPP吗 美国八旬老人离婚半个世纪 与78岁恋人再续前缘 伊核协议风波蔓延 外媒:国际油价或将破百 蔡英文上台将满2年 近半民众不满其两岸关系表现 印尼龙目岛地震已致14死 未知是否有中国游客 马克龙陷入上任来最大危机 这全都怪他贴身保镖? 耻辱!没骨气!这阿森纳让人绝望 全都在混日子 纽约华人宣布参选下任美国总统 成历史第二人(图)
以美举行反导联合军演 重点防御大规模弹道导弹攻击 韩区块链协会制定标准 23家交易所将自我监管审查 埃塞俄比亚议会批准新任总理内阁改组名单 中国赛樊振东陈梦男女头号种子 张继科战资格赛 国元期货简一交易05.18交易策略 富力补强后防看上前皇马铁卫? 高层:人选未确定 一套操作搞蒙了4个人!这是巅峰风之子的招牌 跪谢沃尔!若不是他,NBA怕不是大结局是解散了 美新闻台本想“拍马屁”却请错嘉宾 特朗普遭猛批 法空军特种部队招兵买马 首次直接从民间征募人员 齐达内:皇马花4亿买内马尔?我觉得价都涨疯了 神秘趣头条:资讯界的“拼多多”正在崛起
数据趣谈:白魔术师神数据NBA历史仅张伯伦一人 飞机也要有卧铺了!空客拟将货舱变睡舱 13岁女生遭班主任殴打 涉事者多次评优曾索要红包 三星拟向中兴等厂商供应移动处理器 目前正在谈判 成都市民使用ofo扫到故障车 报修后仍被收使用费 又有逃犯听张学友演唱会落网 民警等他听完再抓 尼泊尔一名部长因不当言论而辞职 北京市气象台:明天山区有雷阵雨 最高气温33℃ 京东收盘跌逾5% 四季度亏损幅度超出市场预期 女人没经验开什么店好 如何利用微信挣钱 2017做什么生意有前景 2017做什么生意有前景 AG亚游集团