在MySQL中,InnoDB类型的表中用外键引用MyISAM表中的主键,在建表时会遇到错误!
例如,创建用户表users
create table users
(
id int not null primary key auto_increment,
username varchar(32) not null,
password varchar(32)
)ENGINE=MyISAM;
紧接着创建用户信息表userinfo,外键引用用户表users
create table userinfo
(
id int not null primary key auto_increment,
user_id int not null,
......,
constraint fk_user_id foreign key(user_id) references users(id)
)ENGINE=InnoDB;
系统会报如下错误:
ERROR 1005(HY000): Can't create table 'test.userinfo' (errno: 150)
解决方法:
在建立userinfo之前先关闭外键约束,建完userinfo之后再打开外键约束
set foreign_key_checks=0; //关闭外键检查
create table userinfo
(
id int not null primary key auto_increment,
user_id int not null,
......,
constraint fk_user_id foreign key(user_id) references users(id)
)ENGINE=InnoDB;
set foreign_key_checks=1; //打开外键检查