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 ...
随机推荐
- 3-C++程序的结构1.3
类的友元 一个类之外的函数,又与该类有特殊关系! 友元关系提供了不同类或对象的成员函数之间.类的成员函数与一般函数之间进行数据共享的机制.通俗地说,友元关系就是一个类主动声明那些其他类或函数是它的朋友 ...
- 创建Sitemap文件供搜索引擎使用
以下内容转载自 http://www.cnblogs.com/webtrados/archive/2009/12/29/1635305.html 如何创建Sitemap文件 Sitemap的格式有XM ...
- 妙用Update Select
update PipeLine set PipeLine_Key = PipeLine.RegionCode + '|' + PipeLine.S_Point + '|' + PipeLine.E_P ...
- 使用AnimatorOverrideController动态更换animationclip注意事项
http://www.ceeger.com/forum/read.php?tid=19138 public AnimationClip clip; Animator anim; void Awake( ...
- 新版蜀山剑侠传3D立体格斗全方位剖析
国人终极格斗<蜀山剑侠传>,突破传统横版格斗"二次元"瓶颈,率先开辟3D立体横版格斗网游先河,实现"有纬度"的空间化立体式全景3D战斗体验!游戏大量 ...
- bzoj 4541: [Hnoi2016]矿区【平面图转对偶图+生成树】
首先平面图转对偶图,大概思路是每条边存正反,每个点存出边按极角排序,然后找每条边在它到达点的出边中极角排序的下一个,这样一定是这条边所属最小多边形的临边,然后根据next边找出所有多边形,用三角剖分计 ...
- 基于php的AWS存储服务
近几天用到了aws的s3存储服务,公司内部的完全兼容aws并对其进行了封装,之前也用过,现在把经验总结一下. 既然要用,首先需要安装sdk,下边提供了几种安装方法 方法一:使用composer安装 1 ...
- zookeeper master 选举
原文地址: http://www.cnblogs.com/nevermorewang/p/5611807.html 选主原理介绍:zookeeper的节点有两种类型,持久节点跟临时节点.临时节点有个特 ...
- Tinghua Data Mining 9
关联规则,营销购物 空缺 协同过滤
- AU3中BitAnd与Win32汇编中的&按位进行与操作的本质思考
心越静,思考的越透彻.不要着急,宇宙有求必应!我可能是最笨的才会写出来进行思考,写出来至少自己在碰到这些本质上的问题不会再度卡壳.本着"没有交流的思考不是完整的思考"的原则,我将这 ...