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


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

     1 -- 创建course表
     2 CREATE TABLE `course` (
     3   `cno` varchar(3) NOT NULL,
     4   `cname` varchar(12) DEFAULT NULL,
     5   `lhour` int(11) DEFAULT NULL,
     6   `credit` int(11) DEFAULT NULL,
     7   `semester` varchar(2) DEFAULT NULL,
     8   PRIMARY KEY (`cno`)
     9 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    10 
    11 -- 创建student表
    12 CREATE TABLE `student` (
    13   `sno` varchar(6) NOT NULL,
    14   `sname` varchar(6) DEFAULT NULL,
    15   `sex` varchar(2) DEFAULT NULL,
    16   `bdate` datetime DEFAULT NULL,
    17   `dept` varchar(8) DEFAULT NULL,
    18   `classno` varchar(4) DEFAULT NULL,
    19   PRIMARY KEY (`sno`)
    20 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    21 
    22 -- 创建sc表
    23 CREATE TABLE `sc` (
    24   `sno` varchar(6) NOT NULL,
    25   `cno` varchar(3) NOT NULL,
    26   `grade` int(11) DEFAULT NULL,
    27   PRIMARY KEY (`sno`,`cno`),
    28 -- 这里直接插入外键
    29   foreign  KEY (`sno`) references `student`.`student`(`sno`),
    30   foreign  KEY (`cno`) references `student`.`course`(`cno`)
    31 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

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

    1 -- 建表之后再对表中添加外键
    2 alter table `sc`
    3 add foreign key (`sno`)
    4 references `student`(`sno`);
    5 
    6 alter table `sc`
    7 add foreign key (`cno`)
    8 references `course`(`cno`);

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

    例,删除student表

     

    三、workbench的bug(?)

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

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

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

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

  • 相关阅读:
    Springboot单元测试(MockBean||SpyBean)
    使用 Mockito 单元测试 – 教程
    spring结合mockito
    Spatis service单元测试: 使用mock mapper的方式
    单元测试Mockito中的Mock和Spy
    强大的Mockito测试框架
    Mockito单测,mock service层的mapper
    Mockito教程
    SetupFactory 制作安装包
    fiddler的一些记录
  • 原文地址:https://www.cnblogs.com/youyou0/p/9129448.html
Copyright © 2020-2023  润新知