关于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表

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

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

实际上设置外键时就不能只删除主表了,这不符合参照完整性约束,会出bug,workbench编译就没有考虑到这个;
并且这不是我的mysql版本的问题,我的是8.0版本,使用命令行就没有问题,显示不能删除。
关于mysql设置外键,实现参照性完整性约束,以及workbench上的一个bug(?)的更多相关文章
- 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中如果表和表之间建立的外键约束,则无法删除表及修改表结构 解决方法是在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导出到sql语句,重新 ...
- 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数据库--外键约束及外键使用
什么是主键.外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯 ...
随机推荐
- SharePoint CU、Hotfix和SP版本的区别
1.Hotfix:通常是对一个特殊问题的修复包 2.CU(Cumulative Update):Hotfix的集合,包含从上一个SP(Service Pack)版本以来所有的Hotfix 3.SP(S ...
- 《用Python写爬虫》学习笔记(一)
注:纯文本内容,代码独立另写,属于本人学习总结,无任何商业用途,在此分享,如有错误,还望指教. 1.为什么需要爬虫? 答:目前网络API未完全放开,所以需要网络爬虫知识. 2.爬虫的合法性? 答:爬虫 ...
- Linux关机总结
立刻关机 root@ubuntu17:~# shutdown -h now 100分钟后关机 root@ubuntu17:~# shutdown -h + Shutdown scheduled -- ...
- react-redux-store
store是联系state 和 reducer的部分 Store 有以下职责: 维持应用的 state: 提供 getState() 方法获取 state: 提供 dispatch(action) 方 ...
- Python标准库--time模块的详解
time模块 - - -时间获取和转换 在我们学习time模块之前需要对以下的概念进行了解: 时间戳:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08 ...
- python 统计单词个数,并按个数与字母排序
# coding: utf-8 # In[1]: import collections str = "Be slow to promise and quick to perform" ...
- 安装selenium,驱动geckodriver,及出现的问题
cmd输入安装selenium指令: pip install selenium 1.报错 Could not find a version that satisfies the requirement ...
- webpack - minipack 打包原理
code:https://github.com/ronami/minipack 看了https://www.youtube.com/watch?v=Gc9-7PBqOC8总结一下 工具和环境: nod ...
- MarkdownPan2 简单使用指南
markdown 简单使用指南 一级标题 二级标题 三级标题加代码 四级标题 这里是加粗 这里是正文and English 888 这里有正文嵌入代码这种样式 这里是代码块 这种使用的代码块 还有引用 ...
- 成功使Linux服务端和Windows客户端建立socket通信
一.准备工作 1.一台装有虚拟机的Windows7操作系统,虚拟机中装的是CentOS6.5版本的Linux 2.Windows7已经装有java环境 二.编码 使用java编写socket通信的服务 ...