《数据库系统概念》附录SQL数据定义出现外键约束错误的解决方法
2016-04-19 22:25
561 查看
我使用的数据库是mariadb,从创建第3个表“course”起出现错误:create table `university`.`course` (errno: 150 “Foreign key constraint is incorrectly formed”);
SQL语句如下:
网上查出现该错误时,错误原因可能为COLLATE或者ENGINE不一致,但事实上是因为在’references‘后的‘department’未指定字段名称‘(dept_name)’。改为下面的语句就可以了:
后面的类似。
附上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,…)”是必需的。
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,…)”是必需的。
相关文章推荐
- mysql主从
- (二)不同数据库间的交叉数据查询插入等操作实现
- mysql 查询,切换数据库
- MySQL常用函数
- Redis数据持久化
- Redis与Memcached的区别
- 数据库实验2
- oracle数据库安装1
- oracle应该注意的细节
- 局域网内sqldeveloper客户端连接oracle服务器
- mysql学习笔记(二)
- sql语句优化
- C#数据库编程---事务回滚
- oracle数据库创建用户,并且给用户授权
- mysql常用语句
- linux下oracle 11.2.0.1升级到11.2.0.4
- mysql解压之后的安装
- redis基本数据类型和常用命令操作
- mysqldump使用方法(MySQL数据库的备份与恢复)
- Oracle-SQL03