mysql - 使用外键创建表的 SQL 语句不正确?

标签 mysql sql ddl

我不确定为什么 SQL 不适用于类表。我知道问题与外键行有关,如果我删除将创建的表。我的语法有问题吗?

我收到的错误是:错误代码:1005。无法创建表“university.class”(errno:150)

CREATE TABLE Faculty (
    facId VARCHAR(6),
    name VARCHAR(20) NOT NULL,
    department VARCHAR(20),
    rank VARCHAR(10),
    CONSTRAINT Faculty_facId_pk PRIMARY KEY (facId));

DROP TABLE Class;

CREATE TABLE Class (
    classNumber VARCHAR(8),
    facId VARCHAR(6) NOT NULL,
    schedule VARCHAR(8),
    room VARCHAR(6),
    CONSTRAINT Class_classNumber_pk PRIMARY KEY (classNumber),
    CONSTRAINT Class_facId_fk FOREIGN KEY (facId) REFERENCES Faculty (facId) ON DELETE SET NULL,
    CONSTRAINT Class_schedule_room_uk UNIQUE (schedule, room));

最佳答案

您有ON DELETE SET NULL,但Class.facID不允许空值,因此这是不可能的。

This works并删除父记录,将 NULL 列保留在孤立记录中。

CREATE TABLE Faculty (
    facId VARCHAR(6),
    name VARCHAR(20) NOT NULL,
    department VARCHAR(20),
    rank VARCHAR(10),
    CONSTRAINT Faculty_facId_pk PRIMARY KEY (facId));



CREATE TABLE Class (
    classNumber VARCHAR(8),
    facId VARCHAR(6) NULL,
    schedule VARCHAR(8),
    room VARCHAR(6),
    CONSTRAINT Class_classNumber_pk PRIMARY KEY (classNumber),
    CONSTRAINT Class_facId_fk FOREIGN KEY (facId) REFERENCES Faculty (facId) ON DELETE set null,
    CONSTRAINT Class_schedule_room_uk UNIQUE (schedule, room));


INSERT INTO Faculty 
VALUES('1','Foo','foo','foo');


INSERT INTO Class 
VALUES('1','1','foo','foo');

DELETE FROM Faculty;

关于mysql - 使用外键创建表的 SQL 语句不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16573518/

相关文章:

mysql - 我怎样才能对数据库中的多个表或类似的东西进行全局选择?

javascript - 更改第一个 DropDownList 的选项后,获取 Jquery 中其他 DropDownList 的值

sql-server - 引用列的统计信息是否会阻止删除该列?

postgresql - 我们可以使用 "name"作为 PostgreSQL 中的列名吗?

MySQL 整数列,唯一值但可能默认吗?

mysql - 是否有任何Linux命令来查找mysql数据库的内存消耗?

python - 在 MacOS Sierra (Python 3.6) 上安装 mysqlclient 时出错

mysql - 计数不同的值,其中另一个值的计数 = 1

php - 如何防止 PHP 中的 SQL 注入(inject)?

mysql - mysql中如何查看登录信息