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版本,使用命令行就没有问题,显示不能删除。

  • 相关阅读:
    poj 3616 Milking Time
    poj 3176 Cow Bowling
    poj 2229 Sumsets
    poj 2385 Apple Catching
    poj 3280 Cheapest Palindrome
    hdu 1530 Maximum Clique
    hdu 1102 Constructing Roads
    codeforces 592B The Monster and the Squirrel
    CDOJ 1221 Ancient Go
    hdu 1151 Air Raid(二分图最小路径覆盖)
  • 原文地址:https://www.cnblogs.com/youyou0/p/9129448.html
Copyright © 2011-2022 走看看