您的位置:首页 > 数据库

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

2016-04-19 22:25 561 查看
我使用的数据库是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,…)”是必需的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: