《数据库系统概念》附录SQL数据定义出现外键约束错误的解决方法

我使用的数据库是mariadb,从创建第3个表“course”起出现错误:create table `university`.`course` (errno: 150 “Foreign key constraint is incorrectly formed”);
SQL语句如下:

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
    );

网上查出现该错误时,错误原因可能为COLLATE或者ENGINE不一致,但事实上是因为在’references‘后的‘department’未指定字段名称‘(dept_name)’。改为下面的语句就可以了:

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
    );

后面的类似。
附上mariadb官方的参考资料

index_definition:
{INDEX|KEY} [index_name] [index_type] (index_col_name,…) [index_option] …
| {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,…) [index_option] …
| [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,…) [index_option] …
| [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,…) [index_option] …
| [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,…) reference_definition

index_col_name:
col_name [(length)] [ASC | DESC]

index_type:
USING {BTREE | HASH | RTREE}

index_option:
KEY_BLOCK_SIZE [=] value
| index_type
| WITH PARSER parser_name

reference_definition:
REFERENCES tbl_name (index_col_name,…)
[MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
[ON DELETE reference_option]
[ON UPDATE reference_option]

reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION

其中reference_definition一项下面第一行为“REFERENCES tbl_name (index_col_name,…) ”,“(index_col_name,…)”是必需的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值