zoukankan      html  css  js  c++  java
  • 关于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版本,使用命令行就没有问题,显示不能删除。

  • 相关阅读:
    Morpheus
    UCSC cancer genome
    LSF 作业系统常用命令
    R 语言处理excel为data.frame
    Expression Atlas
    Oncomine 数据库
    pathlib.Path 类的使用
    DT包 -- R语言中自定义表格数据
    R 目录及文件操作
    R 指定安装镜像的方法
  • 原文地址:https://www.cnblogs.com/youyou0/p/9129448.html
Copyright © 2011-2022 走看看