mysql中如何设置外键约束?


mysql中设置外键约束的方法:可以通过FOREIGN KEY关键字来指定外键,语法“ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(列名) REFERENCES 主表名 (列名);”。

mysql中如何设置外键约束?

(推荐教程:mysql视频教程)

(1) 外键的使用:

外键的作用,主要有两个:
    一个是让数据库自己通过外键来保证数据的完整性和一致性
    一个就是能够增加ER图的可读性
    有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库有时候会由于没有通过外键的检测而使得开发人员删除,插入操作失败.他们觉得这样很麻烦
其实这正式外键在强制你保证数据的完整性和一致性.这是好事儿.
    例如:
    有一个基础数据表,用来记录商品的所有信息。其他表都保存商品ID。查询时需要连表来查询商品的名称。单据1的商品表中有商品ID字段,单据2的商品表中也有商品ID字段
。如果不使用外键的话,当单据1,2都使用了商品ID=3的商品时,如果删除商品表中ID=3的对应记录后,再查看单据1,2的时候就会查不到商品的名称。
   当表很少的时候,有人认为可以在程序实现的时候来通过写脚本来保证数据的完整性和一致性。也就是在删除商品的操作的时候去检测单据1,2中是否已经使用了商品ID为3的商
品。但是当你写完脚本之后系统有增加了一个单据3 ,他也保存商品ID找个字段。如果不用外键,你还是会出现查不到商品名称的情况。你总不能每增加一个使用商品ID的字段的单据时就回去修改你检测商品是否被使用的脚本吧,同时,引入外键会使速度和性能下降。

(2) 添加外键的格式:
ALTER TABLE yourtablename
    ADD [CONSTRAINT 外键名] FOREIGN KEY [id] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name, ...)
    [ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
    [ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
说明:
on delete/on update,用于定义delete,update操作.以下是update,delete操作的各种约束类型:
CASCADE:
外键表中外键字段值会被更新,或所在的列会被删除.
RESTRICT:
RESTRICT也相当于no action,即不进行任何操作.即,拒绝父表update外键关联列,delete记录.
set null:
被父面的外键关联字段被update ,delete时,子表的外键列被设置为null.
而对于insert,子表的外键列输入的值,只能是父表外键关联列已有的值.否则出错.

外键定义服从下列情况:(前提条件)
1)
所有tables必须是InnoDB型,它们不能是临时表.因为在MySQL中只有InnoDB类型的表才支持外键.
2)
所有要建立外键的字段必须建立索引.
3)
对于非InnoDB表,FOREIGN KEY子句会被忽略掉。
注意:
创建外键时,定义外键名时,不能加引号.
如: constraint 'fk_1' 或 constraint "fk_1"是错误的
(3) 查看外键:
SHOW CREATE TABLE ***;可以查看到新建的表的代码以及其存储引擎.也就可以看到外键的设置.
删除外键:
alter table drop foreign key '外键名'.
注意:
只有在定义外键时,用constraint 外键名 foreign key .... 方便进行外键的删除.
若不定义,则可以:
先输入:alter table drop foreign key -->会提示出错.此时出错信息中,会显示foreign key的系统默认外键名.--->
用它去删除外键.

(4) 举例

实例一:
4.1
CREATE TABLE parent(id INT NOT NULL,
                    PRIMARY KEY (id)
) TYPE=INNODB;                      -- type=innodb 相当于 engine=innodb
CREATE TABLE child(id INT, parent_id INT,
                   INDEX par_ind (parent_id),
                   FOREIGN KEY (parent_id) REFERENCES parent(id)
                     ON DELETE CASCADE
) TYPE=INNODB;
向parent插入数据后,向child插入数据,插入时,child中的parent_id的值只能是parent中有的数据,否则插入不成功;
删除parent记录时,child中的相应记录也会被删除;-->因为: on delete cascade
更新parent记录时,不给更新;-->因为没定义,默认采用restrict.
4.2
若child如下:
mysql>
create table child(id int not null primary key auto_increment,parent_id int,
index par_ind (parent_id),
constraint fk_1 foreign key (parent_id) references
parent(id) on update cascade on delete restrict)
type=innodb;
用上面的:
1).
则可以更新parent记录时,child中的相应记录也会被更新;-->因为: on update cascade
2).
不能是子表操作,影响父表.只能是父表影响子表.
3).
删除外键:
alter table child drop foreign key fk_1;
添加外键:
alter table child add constraint fk_1 foreign key (parent_id) references
parent(id) on update restrict on delete set null;

(5) 多个外键存在:

product_order表对其它两个表有外键。
一个外键引用一个product表中的双列索引。另一个引用在customer表中的单行索引:
CREATE TABLE product (category INT NOT NULL, id INT NOT NULL,
                      price DECIMAL,
                      PRIMARY KEY(category, id)) TYPE=INNODB;
CREATE TABLE customer (id INT NOT NULL,
                      PRIMARY KEY (id)) TYPE=INNODB;

CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT,
                      product_category INT NOT NULL,
                      product_id INT NOT NULL,
                      customer_id INT NOT NULL,
                      PRIMARY KEY(no),
                      -- 双外键
                      INDEX (product_category, product_id),
                      FOREIGN KEY (product_category, product_id)
                        REFERENCES product(category, id)
                        ON UPDATE CASCADE ON DELETE RESTRICT,
                      -- 单外键
                      INDEX (customer_id),
                      FOREIGN KEY (customer_id)

                       REFERENCES customer(id)) TYPE=INNODB;

(6) 说明:

1.若不声明on update/delete,则默认是采用restrict方式.
2.对于外键约束,最好是采用: ON UPDATE CASCADE ON DELETE RESTRICT 的方式.

以上就是mysql中如何设置外键约束?的详细内容,更多请关注其它相关文章!


# 修改密码  # 目前网站推广排行  # 销售行业网站优化技术  # 营销推广年会活动方案  # 矿机推广视频素材网站大全  # 合作网站推广服务方案  # 产品营销推广途径和方法  # 怎么衡量seo效果  # 萝岗网站排名优化公司  # 那种网站推广赌博  # seo云优化网站  # mysql  # 若不  # 则可  # 如何设置  # 也就  # 也会  # 解锁  # 键名  # 镜像  # 宋体 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 使用TinyButStrong生成HTML并结合Dompdf创建PDF教程  顺丰速运官网查询入口 顺丰物流查询官网入口链接  《下一站江湖2》大雪山加入方法  Python实时数据流中高效查找最大最小值  抖音评论无法发送如何修复 抖音评论功能操作指南  拷贝漫画2025网页版入口 拷贝漫画官网免费看全集  Linux如何优化系统启动流程_Linux启动项优化方案  win11怎么设置默认终端为Windows Terminal Win11替代CMD和PowerShell【技巧】  汽水音乐在线入口 汽水音乐网页端官方页面快速打开  视频转蓝光m2ts格式  sf漫画官网登录入口直达_sf漫画官方正版网址  React应用中Commerce.js数据加载与状态管理最佳实践  申通快递物流信息查询 申通快递包裹状态追踪  《雷电模拟器》截图方法介绍  AffinityDesigner图层蒙版怎么用_AffinityDesigner图层蒙版设计应用  MySQL多重关联查询:利用别名高效获取同一表的多个关联字段  微信客户端如何找回密码_微信客户端忘记密码找回方法  视频号视频怎么免费保存到相册?保存到相册需要注意什么?  智学网app怎么登录忘记密码_智学网app忘记密码找回与重新登录操作方法  Yandex俄罗斯搜索引擎官网入口 Yandex网页端直接访问  4399造梦西游3无敌版_4399游戏入口  CSS如何控制元素外边距_margin实现布局间隔  《深林》冬季章节图文攻略  《全民k歌》音乐怎么下载到本地2025  优化长HTML属性值:SonarQube警告与实用策略  Sublime Text怎么关闭自动完成_Sublime禁用Auto Complete设置  J*a中的值传递到底指什么_值传递模型在参数传递中的真正含义说明  Excel如何快速找到并断开外部数据源链接_Excel外部数据源断开方法  以下哪一项是古代兵书三十六计中的计谋  《tt语音》超级玩家开通方法  yy漫画登录页面官方入口_yy漫画在线阅读网址入口  奥克斯空调不制热啥毛病_奥克斯空调不制热原因分析及解决技巧  《金山词霸》语音翻译方法  背部总是隐隐作痛怎么回事 背痛如何改善  小红书网页版怎么进 小红书网页版通用入口  第五人格PC版怎么避免被封号_第五人格PC版防封号注意事项  国际经济与贸易就业方向解析  火狐浏览器无法自动更新怎么办 手动更新火狐浏览器到最新版本【解决】  中大网校app做题记录清除方法  J*aScript字符串_Unicode处理  《东方航空》添加乘机人方法  Word如何将文字快速转成表格 Word文本转换成表格功能使用技巧【效率】  b站网页版入口 哔哩哔哩官方网站直接进入  有道AI翻译入口 智能写作官方网站入口  《宝可梦大集结》S4冠军之路开始时间介绍  163邮箱网页版官方登录入口 163邮箱网页版访问页面  word页码灰色不能用如何解决  《新三国志曹操传》游历事件袁尚突围攻略  如何在CSS中设置背景图像:一个全面指南  小米手机截图后如何查看历史_小米手机截图历史记录查看方法 

 2020-10-12

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.