mysql创建外键约束的语法workbench_关于mysql设置外键,实现参照性完整性约束,以及workbench上的一个bug(?)...

一、本次数据库中有student,course,sc表,其设置情况

-- 创建course表

CREATE TABLE `course` (

`cno` varchar(3) NOT NULL,

`cname` varchar(12) DEFAULT NULL,

`lhour` int(11) DEFAULT NULL,

`credit` int(11) DEFAULT NULL,

`semester` varchar(2) DEFAULT NULL,

PRIMARY KEY (`cno`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 创建student表

CREATE TABLE `student` (

`sno` varchar(6) NOT NULL,

`sname` varchar(6) DEFAULT NULL,

`sex` varchar(2) DEFAULT NULL,

`bdate` datetime DEFAULT NULL,

`dept` varchar(8) DEFAULT NULL,

`classno` varchar(4) DEFAULT NULL,

PRIMARY KEY (`sno`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 创建sc表

CREATE TABLE `sc` (

`sno` varchar(6) NOT NULL,

`cno` varchar(3) NOT NULL,

`grade` int(11) DEFAULT NULL,

PRIMARY KEY (`sno`,`cno`),

-- 这里直接插入外键

foreign KEY (`sno`) references `student`.`student`(`sno`),

foreign KEY (`cno`) references `student`.`course`(`cno`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这是创建表时直接插入外键,也可以创建表后再对sc表插入外键

-- 建表之后再对表中添加外键

alter table `sc`

add foreign key (`sno`)

references `student`(`sno`);

alter table `sc`

add foreign key (`cno`)

references `course`(`cno`);

二、验证其参照完整性。这个时候,我们再对sc表添加student表里没有的sno,course表没有的cno,都不被允许。删除student表或course表中sc中出现过的sno(cno)的行和列时,也不被允许。

例,删除student表

3d30afbef6eaa353e316da9164b12e5d.png

三、workbench的bug(?)

在workbench进行删除操作的时候,即使设置了外键,也是可以删除表的

9acaec6e190d56b5e6c6c3c63dca1209.png

这个时候再加载数据就会有问题,在左上方点刷新数据库按钮的时候,就会出现数据加载有问题错误

1711fcb0dd5133a5843cfd0258fc8568.png

实际上设置外键时就不能只删除主表了,这不符合参照完整性约束,会出bug,workbench编译就没有考虑到这个;

并且这不是我的mysql版本的问题,我的是8.0版本,使用命令行就没有问题,显示不能删除。

MySQL设置外键报错 #1452 - Cannot add or update a child row: a foreign key constraint fails 解决方法

MySQL数据库,当我尝试在A表中设置B表的主键为外键时,报出错误:#1452 - Cannot add or update a child row: a foreign key constraint ...

mysql设置外键约束开启-关闭

在MySQL中删除一张表或一条数据的时候,出现 [Err] 1451 -Cannot delete or update a parent row: a foreign key constraint f ...

mysql 设置外键 四大属性 CASCADE SET NULL NO ACTION RESTRICT 理解

CASCADE:主表delete.update的时候,从表会delete.update掉关联记录: SET NULL:主表delete.update的时候,从表会将关联记录的外键字段所在列设为null ...

(转)mysql 无法设置外键的原因总结

在Mysql中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因. 1.  两个字段的类型或者大小不严格匹配.例如,如果一个 ...

MySQL中MyISAM与InnoDB区别及选择,mysql添加外键

InnoDB:支持事务处理等不加锁读取支持外键支持行锁不支持FULLTEXT类型的索引不保存表的具体行数,扫描表来计算有多少行DELETE 表时,是一行一行的删除InnoDB 把数据和索引存放在表空间 ...

MySQL基础 - 外键和约束

在工作中经常会遇到不少不同的观点,比如对于数据库来说那就是是否要设置外键,设置外键的理由自然不必多说,而不设置外键的理由多半为设置外键影响性能,但就目前工作来讲,还没有涉及到因为外键而引发的数据库瓶颈 ...

MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)

MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作): a.创建2张表 create table userinfo(nid int not nul ...

MySQL数据库--外键约束及外键使用

什么是主键.外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯 ...

mysql 添加外键时 error 150 问题总汇

当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的.像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上, ...

随机推荐

eclipse tomcat集成开发,修改server.xml

根据需求,需要修改server.xml文件,用于更改tomcat的运行方式.发现修改后,在eclipse中发布项目,server.xml的修改又被恢复了.网上找了n多资料只了解到eclipse维护自己 ...

Jasmine测试ng Promises - Provide and Spy

jasmine提供了很多些很实用的处理Promises的方法,首先我们来考虑下面的这个例子: angular.module("myApp.store").controller(&q ...

SharpMap V1.1 For Web教程系列之——前言

上次使用SharpMap还是在0.9版本阶段,那个时候主要是为了将SharpMap移植到Windows Mobile环境中,具体可参见原先的文章.互联网真的是风云变幻啊,才短短几年,Windows M ...

DFS入门之一

深度优先搜索实现较为简单,需要控制两个因素: 1.已经访问过的元素不能再访问,在实际题目中还要加上不能访问的元素(障碍) 2.越界这种情况是不允许的 以杭电的1312 Red and Black 为例 ...

小希的迷宫(HDU 1272 并查集判断生成树)

小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

struts2 action重定向

struts2的结果类型:

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页

打赏

酷酷猫先辈

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者