阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

教你mysql如何增加外键约束

29次阅读
没有评论

共计 2015 个字符,预计需要花费 6 分钟才能阅读完成。

导读 在本篇文章里小编给大家整理的是一篇关于 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 增加外键约束具体方法的文章就介绍到这了。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计2015字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中