mysql - 学习<<数据库系统概念>>6ed出现ERROR 1005 (HY000) : Can't create table,

标签 mysql sql

create table classroom
    (building       varchar(15),
     room_number        varchar(7),
     capacity       numeric(4,0),
     primary key (building, room_number)
    );

create table department
    (dept_name      varchar(20), 
     building       varchar(15), 
     budget             numeric(12,2) check (budget > 0),
     primary key (dept_name)
    );

前两个create语句是对的。但是在

create table course
    (course_id      varchar(8), 
     title          varchar(50), 
     dept_name      varchar(20),
     credits        numeric(2,0) check (credits > 0),
     primary key (course_id),
     foreign key (dept_name) references department
        on delete set null
    );

出现ERROR 1005 (HY000): Can't create table ... 我不知道如何解决它。 显然,它的外键数据类型是一致的。

最佳答案

要获取有关错误的详细信息,请运行 SHOW ENGINE INNODB STATUS\G 并查找 LATEST FOREIGN KEY ERROR。它应该是这样的:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
2013-12-04 09:50:19 139428000 Error in foreign key constraint of table test/course:
foreign key (dept_name) references department
        on delete set null
    ):
Syntax error close to:

        on delete set null
    )

解决方法是指定父表的列名,像这样:

create table course
    (course_id      varchar(8), 
     title          varchar(50), 
     dept_name      varchar(20),
     credits        numeric(2,0) check (credits > 0),
     primary key (course_id),
     foreign key (dept_name) references department (dept_name) 
        on delete set null
    );

附言您应该知道 CREATE TABLE 语句中的 CHECK 约束实际上没有做任何事情。如 the manual 中所述:

The CHECK clause is parsed but ignored by all storage engines.

关于mysql - 学习<<数据库系统概念>>6ed出现ERROR 1005 (HY000) : Can't create table,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20377979/

相关文章:

sql - 尝试使用表别名选择 null 作为 columnName

php - 选择与 Laravel 中的数据库表不同的所有列

mysql - 从一个查询获取查询结果并使用它来过滤下一个结果时存在一些 SQL 子查询问题

java - 记录存在时出现 EntityNotFoundException

mysql - 如何根据另一列中的值从一列中选择唯一值?

sql - 按组起点的差异分组

mysql - sql列格式化

python - 使用来自多个表的随机行的 SELECT UNION 查询

mysql - #1066-不是唯一的表格/别名:'tbl_loan'

php - 多张表,多条语句