教你mysql如何增加外键约束
在本篇文章里小编给大家整理的是一篇关于mysql增加外键约束具体方法及相关实例内容,有兴趣的朋友们可以跟着学习下。 |
本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。
MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。
定义外键时,需要遵守下列规则:
主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
必须为主表定义主键。
主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
外键中列的数目必须和主表的主键中列的数目相同。
外键中列的数据类型必须和主表主键中对应列的数据类型相同。
mysql给表增加外键约束
外键约束可以在修改表时添加,但是添加外键约束的前提是:从表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据。
在修改数据表时添加外键约束的语法格式如下:
ALTER TABLE <数据表名> ADD CONSTRAINT <外键名> FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
示例
修改数据表 tb_emp2,将字段 deptId 设置为外键,与数据表 tb_dept1 的主键 id 进行关联
mysql> ALTER TABLE tb_emp2 -> ADD CONSTRAINT fk_tb_dept1 -> FOREIGN KEY(deptId) -> REFERENCES tb_dept1(id); Query OK, 0 rows affected (1.38 sec) Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE tb_emp2\G *************************** 1. row *************************** Table: tb_emp2 Create Table: CREATE TABLE `tb_emp2` ( `id` int(11) NOT NULL, `name` varchar(30) DEFAULT NULL, `deptId` int(11) DEFAULT NULL, `salary` float DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_tb_dept1` (`deptId`), CONSTRAINT `fk_tb_dept1` FOREIGN KEY (`deptId`) REFERENCES `tb_dept1` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 1 row in set (0.12 sec)
注意:在为已经创建好的数据表添加外键约束时,要确保添加外键约束的列的值全部来源于主键列,并且外键列不能为空。
内容扩展:
使用外键约束的时机
老实说,在MySQL中使用InnoDB表的时候,不一定非用外键约束不可,然而,为了外键约束在某些情况下的功用,我们将通过前面提到的例子的代码进行具体说明。它包括两个MyISAM表,分别用于存放博客文章和评论。
定义数据库模式时,我们要在这两个表之间建立起一对多的关系,方法是在存放评论的表中创建一个外键,以将其中的数据行(即评论)对应到特定的博客文章。下面是创建示例MyISAM表的基本SQL代码:
DROP TABLE IF EXISTS `test`.`blogs`;CREATE TABLE `test`.`blogs` (`id` INT(10) UNSIGNED AUTO_INCREMENT,`title` TEXT,`content` TEXT,`author` VARCHAR(45) DEFAULT NULL,PRIROSE KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;DROP TABLE IF EXISTS `test`.`comments`;CREATE TABLE `test`.`comments` (`id` INT(10) UNSIGNED AUTO_INCREMENT,`blog_id` INT(10) UNSIGNED DEFAULT NULL,`comment` TEXT,`author` VARCHAR(45) DEFAULT NULL,PRIROSE KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
到此这篇关于mysql增加外键约束具体方法的文章就介绍到这了。
教你mysql如何增加外键约束相关推荐
- mysql外键约束案例_详解MySQL中的外键约束问题
使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建.检索.更新和删除等操作都是些比较简单的过程 .理论上,只要掌握了最常见的SQL语句的用法,并熟悉您选择使用的服务 ...
- mysql不能删除外键吗,MySQL不能删除外键约束所需的索引
MySQL不能删除外键约束所需的索引 我需要改变现有的数据库添加一列. 因此我也想更新UNIQUE字段来包含这个新列. 我试图删除当前的索引,但不断收到错误MySQL Cannot drop inde ...
- mysql级联删除外键约束_mysql通过外键级联删除
mysql 可通过外键约束,实现数据的级联更新或者删除. 例如有主表(员工排班表): CREATE TABLE `personal_schedule` ( `id` int(11) NOT NULL ...
- mysql级联删除外键约束_玩转MySQL的外键约束之级联删除篇
[IT168 文档]如今,许多关系型数据库管理系统都提供了外键约束这一强大的功能特性,它能够帮助我们自动地触发指定的动作,诸如删掉.更新数据库表的记录等,从而维护各数据库表之间预定义的关系.本文将演示 ...
- oracle外键约束怎么删除,mysql oracle 删除外键约束
oracle 删除外键约束 禁用约束 启用约束 oracle 删除外键约束 禁用约束 启用约束 执行以下sql生成的语句即可 删除所有外键约束 Sql代码 select 'alter table ' ...
- mysql级联删除外键约束_mysql增加外键级联删除示例
增加外键级联删除: ALTER TABLE `extends` ADD CONSTRAINT `extends_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES ` ...
- mysql外键约束脚本_如何在MySQL中设置外键约束
(1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库 ...
- 如何在MySQL中设置外键约束
MySql外键设置详解 (1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建 ...
- 在mysql中如何添加外键约束_如何在MySQL中设置外键约束
(1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库 ...
最新文章
- 用C#来开发CAD插件,含源代
- CVPR2022 | 只用一张图+相机走位,AI就能脑补周围环境,来自华人团队
- 干货丨浅析分布式系统(经典长文,值得收藏)
- 音视频处理中的硬压缩与软压缩
- 链家前DBA判刑7年!你还敢不敢删库?
- 【Python基础】Github标星4.7k,每天推送一个python小实例的Python库
- 接口隔离原则_是时候深入学习一下“接口隔离原则”了
- GDB调试教程:1小时玩转Linux gdb命令
- 百度推送管理插件3.4.9Pro
- 增量更新同步_干货 | Debezium实现Mysql到Elasticsearch高效实时同步
- 2018-2019互联网大厂算法/深度学习/NLP面试笔记
- python findall_Python 正则表达式:findall
- 地统计学插值 | IDW(反距离)和Kriging(克里金)
- 格雷码与二进制的转换 verilog实现加仿真
- 远程服务RMI源码解析(二)
- 语言栏不见了怎么办?
- Ardupilot多旋翼自动规划路径实现绕开障碍物避障
- unity Inspector 面板扩展
- Log4j的日志对象
- Micro-cap导入元件库
热门文章
- 又有多省明确开学时间!哪个省份的高校全国最早开学?
- 两阶段提交(Two-Phase Commit)
- MATLAB_8-边缘检测_demo.m[课堂齿轮作业]其他的在文章末尾
- Windows禁止启动某个程序!偷偷禁止,别人就打不开。。。比如,微信 LOL 吃鸡 爱奇艺
- 收藏 | YOLO系列综述:从V1到V4
- 感知机算法分类原理学习笔记
- 任意多相机系统的SLAM重设计
- 聊聊找工作中的项目经验问题(推荐系统和智能问答)
- 强化学习与3D视觉结合新突破:高效能在线码垛机器人
- 【从零学习OpenCV】4Ubuntu系统中安装OpenCV 4