mysql - 为什么引用不起作用

标签 mysql sql foreign-keys

试图用一个 MySQL 示例向其他人解释 REFERENCES CONSTRAINT,但我无法使这个讨厌的示例起作用!如果我将它定义为 FOREIGN KEY 似乎可行,但我有教科书说我不必这样做(使其成为列级引用约束而不是表级约束)。

问题来了,为什么UPDATE了dept表的dname之后,emp表的dname没有变化?

-- SQL CODE BEGINS
DROP TABLE IF EXISTS dept;
DROP TABLE IF EXISTS emp;

CREATE TABLE dept (
    dname CHAR(10),
    dnum  numeric(3,0)
) ENGINE=InnoDB;

CREATE TABLE emp (
  dname CHAR(10) REFERENCES dept(dname) ON UPDATE CASCADE,
  ename CHAR(10)
) ENGINE=InnoDB;

INSERT INTO dept VALUES ("AAA", 111);
INSERT INTO dept VALUES ("BBB", 222);

INSERT INTO emp VALUES ("CCC", "Carol"); 
INSERT INTO emp VALUES ("AAA", "Alice");

SELECT * from dept;
SELECT * from emp;
UPDATE dept SET dname="XYZ" WHERE dnum=111;
SELECT * from dept;
SELECT * from emp;

-- SQL CODE ENDS

啊!

最佳答案

  • 声明 dept.dnamePRIMARY KEY
  • emp.dname 上创建 FOREIGN KEY 约束

完整的 DDL:

CREATE TABLE dept
(
    dname CHAR(10) PRIMARY KEY,
    dnum  numeric(3,0)
) ENGINE=InnoDB;

CREATE TABLE emp 
(
  dname CHAR(10) ,
  ename CHAR(10),
  CONSTRAINT em_FR FOREIGN KEY (dname)
      REFERENCES dept(dname) ON UPDATE CASCADE
) ENGINE=InnoDB;

关于mysql - 为什么引用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14415471/

相关文章:

php - OpenEMR安装错误步骤3

mysql - 如何使这些 wp_postmeta MySQL 查询更快?

sql - 汇总数据的数据库设计

sql - 如何合并 R 中的网络流量数据流对行?

android - 带有 NULLABLE 外键的 SQLite

mysql - 删除 MySQL 中的父表

mysql - 表中有多个外键时如何插入数据

php - codeigniter 中的动态菜单和角色权限

mysql - 房价返回正确结果和错误结果

sql - 大型数据集上 sum(column_name)、sum(1) 和 count(*) 之间的巨大性能差异