mysql 外键关联
mysql 外键关联
什么是外键:
外键是一个特殊的索引,用于关联两个表,只能是指定内容。
如我将新建一个daka的表,然后将此表的class_id 与另外一个class的表的cid字段关联
class表:
CREATE TABLE `class` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`caption` varchar(32) NOT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
mysql> select * from class;
+-----+------------+
| cid | caption |
+-----+------------+
| 1 | 高二1班 |
| 2 | 高二2班 |
| 3 | 高二3班 |
| 4 | 高二4班 |
| 5 | 高二5班 |
+-----+------------+
daka表:
CREATE TABLE `daka` (
`id` int(11) AUTO_INCREMENT NOT NULL,
`student_name` char(16) NOT NULL,
`state` ENUM("Y","N") NOT NULL,
`class_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `fk_class_key` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`)
)
#fk_class_key 这个表示这个外键约束名称,自定义的,此时在
开始往daka表中插入数据,(此时在class_id字段中的值,就必须在class表中的cid字段中要存在如果不存在则会报错,被外键约束)
正常:
mysql> INSERT INTO `daka` (student_name,state,class_id) values("赵丽颖","Y","3");
Query OK, 1 row affected (0.04 sec)
报错:
mysql> INSERT INTO `daka` (student_name,state,class_id) values("赵丽颖","Y","6");
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`newtest`.`daka`, CONSTRAINT `fk_class_key` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`))
在删除的数据的过程中,如果是删除daka表中有外键约束的数据则没有问题,但是如果是删除class表中被外键关联的数据则就会报错,
如下:
mysql> select * from daka;
+----+--------------+-------+----------+
| id | student_name | state | class_id |
+----+--------------+-------+----------+
| 1 | 赵丽颖 | Y | 3 |
| 8 | 赵丽颖1 | Y | 5 |
+----+--------------+-------+----------+
2 rows in set (0.00 sec)
mysql> select * from class;
+-----+------------+
| cid | caption |
+-----+------------+
| 1 | 高二1班 |
| 2 | 高二2班 |
| 3 | 高二3班 |
| 4 | 高二4班 |
| 5 | 高二5班 |
+-----+------------+
5 rows in set (0.00 sec)
mysql> DELETE FROM daka WHERE id=8;
Query OK, 1 row affected (0.08 sec)
mysql> DELETE FROM class WHERE cid=3;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`newtest`.`daka`, CONSTRAINT `fk_class_key` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`))
此处cid=3的这行数据被外键关联了,daka表中有引用他,所以不能直接被删除。
mysql 外键关联的更多相关文章
- mysql外键关联
主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表 ...
- mysql 外键约束及表关联
一.MYSQL中的约束 1.主键:primary key 唯一非空的特性并且可以优化查询速度 2.外键:foreign key 外键的作用保证2个或2个以上的数据表的数据一致性和完整性 3.唯一:un ...
- [MySql]MySql中外键设置 以及Java/MyBatis程序对存在外键关联无法删除的规避
在MySql设定两张表,其中product表的主键设定成orderTb表的外键,具体如下: 产品表: create table product(id INT(11) PRIMARY KEY,name ...
- Mysql中的外键分析(什么是外键,为什么要用外键,添加外键,主外键关联删除)
有一个东西一直在我脑海中是个很烦的东西,但是这东西不搞清楚会阻碍自己的前进.自己做项目demo永远只能用一张表... 所以今天还是学习了下外键希望能够搞明白一些... 百度上搜索外键的作用" ...
- mysql外键添加error1215
在mysql创建表外键的过程中,由于操作不当,会提示cannot add foreign key constraint的错误. 造成此错误可能的原因如下: 1.数据类型不匹配,外键与其相关联的键必须数 ...
- MySQL外键之级联
简介 MySQL外键起到约束作用,在数据库层面保证数据的完整性.例如使用外键的CASCADE类型,当子表(例如user_info)关联父表(例如user)时,父表更新或删除时,子表会更新或删除记录,这 ...
- hibernate一对一双向外键关联
一对一双向外键关联:双方都持有对方的外键关联关系. 主控方和一对一单向外键关联的情况是一样的,主要的差异表现为,被空方需要添加: @OneToOne(mappedBy="card" ...
- Hibernate一对一单向外键关联
一.一对一单向外键关联: 一对一单向外键关联主要用到了以下两个注解: 1.OneToOne(cascade=CasecadeTYPE.ALL); cascade=CasecadeTYPE.ALL:表示 ...
- mysql外键使用和级联
如下面的: create table applicant (id int not null auto_increment primary key, jobId int not null, studen ...
随机推荐
- 20个Flutter实例视频教程-第12节: 流式布局 模拟添加照片效果
视频地址: https://www.bilibili.com/video/av39709290/?p=12 博客地址: https://jspang.com/post/flutterDemo.html ...
- ecplise常见的一些问题
修改注释的字体,默认的字体太小了.
- E20181121-hm
invoke vt. 乞灵,祈求; 提出或授引…以支持或证明; 召鬼; 借助
- URAL1222
题意: 把n拆分成几个数,把这些数乘起来最大. 思路: 3越多越好. 对4,5特判一下,4的时候是2*2大,5的时候还剩个2,那么就是n%3=1的话,我们先拿个4,n%3==2的话就是先拿个2,后面把 ...
- ugui学习资料
官网文档 http://docs.unity3d.com/Manual/index.html 官网视频教程http://unity3d.com/learn/tutorials/modules/begi ...
- MySQL习题1 一对多实例 产品和分类
/* 需求:建立产品和分类表 1.查询每种分类的产品数量,没有产品的分类也要统计.(cname,quantity) 2.根据分类名称查询分类中的所有产品 */ -- ----------------- ...
- html Css PC 移动端 公用部分样式代码整理
css常用公用部分样式代码整理: body, html, div, blockquote, img, label, p, h1, h2, h3, h4, h5, h6, pre, ul, ol, li ...
- JMeter提取和重用作为变量 - 具有更多提取器
这是我们最受欢迎的博文,我们添加了更多提取器.这篇文章解释了如何使用正则表达式提取器从第一个请求的响应中提取密钥,并将提取的密钥用于后续请求.我们称之为JMeter Extract并重复使用. 现在您 ...
- 牛客小白月赛13 E(图、矩阵幂)
AC通道 如果建立第一天某点到某点有几条路的矩阵,做k次矩阵乘就是第k天某点到某点有几条路.统计即可. #include <bits/stdc++.h> using namespace s ...
- 洛谷1005(dp)
1.不要贪,缩小区间去dp就好. 2.预处理指数. 3.__int128可还行. #include <cstdio> #include <cctype> #include &l ...