MySQL中的外键错误150

时间:2013-11-17 12:59:38

标签: mysql sql

我知道已经存在很多这样的问题,但我的表格恰好更简单,并且两列都被编入索引。所以希望这不会被低估。 :)

这是第一张表:

create table users (
    user_num int primary key auto_increment,
    first_name varchar(50),
    last_name varchar(50),
    date_of_birth date,
    email varchar(100),
    password varchar(50),
    note_data longtext
);

这是第二个,它引发了错误:

create table documents
(
    doc_num int primary key auto_increment,
    user_num int,
    doc_data longtext,
    note_data longtext,
    index(user_num),
    foreign key (user_num) references users.user_num on delete cascade
);

这里我在引用密钥时在文档表中创建user_num的索引,并且引用的列已经被索引,作为主键。导致错误的原因是什么?

请帮忙!

2 个答案:

答案 0 :(得分:1)

您需要检查ENGINE = InnoDB或ENGINE = MyISAM。还要确保父表和外键列中的主键列必须是相同的数据类型。

试试这个:

create table documents
(
    doc_num int primary key auto_increment,
    user_num int,
    doc_data longtext,
    note_data longtext,
    foreign key (user_num) references users (user_num) on delete cascade
) engine = InnoDB;

答案 1 :(得分:1)

语法不正确。引用的列必须位于()

create table documents
(
    doc_num int primary key auto_increment,
    user_num int,
    doc_data longtext,
    note_data longtext,
    foreign key (user_num) references users (user_num) on delete cascade
) engine = InnoDB;