详解mysql添加外键的方法
Vivian 2018-06-12 来源 : 阅读 1427 评论 0

摘要:本文主要向大家介绍了mysql添加外键的方法,通过具体的实例让大家了解,希望对大家学习mysql有所帮助。

本文主要向大家介绍了mysql添加外键的方法,通过具体的实例让大家了解,希望对大家学习mysql有所帮助。

为已经添加好的数据表添加外键:

语法:alter

 table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名);

例:

 alter table tb_active add constraint FK_ID foreign key(user_id) REFERENCES tb_user(id)

//FK_ID是外键的名称

/*

CREATE

 TABLE `tb_active` (

 `id`

 int(11) NOT NULL AUTO_INCREMENT,

 `title`

 varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

 `content`

 text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

 `user_id`

 int(11) NOT NULL,

 PRIMARY

 KEY (`id`),

 KEY

 `user_id` (`user_id`),

 KEY

 `user_id_2` (`user_id`),

 CONSTRAINT

 `FK_ID` FOREIGN KEY (`user_id`) REFERENCES `tb_user` (`id`)

)

 ENGINE=InnoDB DEFAULT CHARSET=latin1

*/

  

  

删除外键

语法:

 ALTER TABLE table-name DROP FOREIGN KEY key-id;

例: 

 ALTER TABLE `tb_active` DROP FOREIGN KEY `FK_ID`

  

  

  

自动键更新和删除:

外键可以保证新插入的记录的完整性,但是,如果在REFERENCES从句中已命名的表删除记录会怎么样?在使用同样的值作为外键的辅助表中会发生什么?

   

 很明显,那些记录也应该被删除,否则在数据库中就会有很多无意义的孤立记录,MYSQL可以通过向FOREIGN

 KEY...REFERENCES修饰符添加一个ON DELETE或ON

 UPDATE子句简化任务,它告诉了数据库在这种情况如何处理孤立任务

  

 关键字   

 含义

 CASCADE  

 删除包含与已删除键值有参照关系的所有记录

 SET

 NULL   修改包含与已删除键值有参照关系的所有记录,使用NULL值替换(只能用于已标记为NOT NULL的字段)

 RESTRICT 

 拒绝删除要求,直到使用删除键值的辅助表被手工删除,并且没有参照时(这是默认设置,也是最安全的设置)

 NO

 ACTION  啥也不做

  

 请注意,通过ON

 UPDATE 和 ON DELETE规则,设置MYSQL能够实现自动操作时,如果键的关系没有设置好,可能会导致严重的数据破坏,

 例如:如果一系列的表通过外键关系和ON

DELETE CASCADE

 规则连接时,任意一个主表的变化都会导致甚至只和原始删除有一些将要联系的记录在没有警告的情况被删除,所以,我们在操作之前还要检查这些规则的,操作之后还要再次检查.

  

  

  

添加外键

alter

 table locstock add foreign key locstock_ibfk2(stockid) references product(stockid)

locstock

 为表名, locstock_ibfk2 为外键名 第一个括号里填写外键列名, product为表名,第二个括号里是写外键关联的列名

  

删除外键

alter

 table locstock drop foreign key locstock_ibfk2

  

查看表有哪些外键

show

 create table locstock

  

[CONSTRAINT

 symbol] FOREIGN KEY [id] (index_col_name, ...) 

    REFERENCES

 tbl_name (index_col_name, ...) 

    [ON

DELETE {RESTRICT

 | CASCADE | SET NULL | NO ACTION}] 

    [ON

 UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}] 

  

  

所有tables必须是InnoDB型

 ,它们不能是临时表。    

 在引用表中,必须有一个索引,外键列以同样的顺序被列在其中作为第一列。这样一个索引如果不存在,它必须在引用表里被自动创建。   

 在引用表中,必须有一个索引,被引用的列以同样的顺序被列在其中作为第一列。      

 不支持对外键列的索引前缀。这样的后果之一是BLOB和TEXT列不被包括在一个外键中, 这是因为对这些列的索引必须总是包含一个前缀长度。      

 如果CONSTRAINTsymbol 被给出,它在数据库里必须是唯一的。如果它没有被给出,InnoDB自动创建这个名字。

本文由职坐标整理并发布,希望对同学们学习MySQL有所帮助,更多内容请关注职坐标数据库MySQL数据库频道!

本文由 @Vivian 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程