MySQLの外部参照制約(1)
今だに全体の把握が出来ていないデータベースについて。
MySQL(4.0、MacOS X 10.4)で外部参照制約を利用しようとして、以下のSQLを実行。
create table users (
userid int unsigned not null auto_increment,
name varchar(255),
mail varchar(255),
primary key (userid)
)type=innodb;create table imgphoto (
imgid int unsigned not null auto_increment,
imgname varchar(255),
imgtype varchar(255),
imgpath varchar(255),
tags varchar(255),
userid int unsigned,
foreign key (userid) references users (userid) ON DELETE SET NULL,
primary key (imgid)
)type=innodb;
1005エラーで、imgphotoテーブルが作れないよ、と。けれども、
create table users (
userid int unsigned not null auto_increment,
name varchar(255),
mail varchar(255),
primary key (userid)
)type=innodb;create table imgphoto (
imgid int unsigned not null auto_increment,
imgname varchar(255),
imgtype varchar(255),
imgpath varchar(255),
tags varchar(255),
userid int unsigned,
foreign key (userid) references users (userid) ON DELETE SET NULL,
primary key (imgid)
);
ということで、imgphotoのtype=innodbを外すと問題なく実行できるんです。
謎。なんで?Googleで調べていると同じような事例があります。
以外に有名な話題なのかなあ。なにか、抜けているんだろうか。
追記
id:nipotanさんのご指摘で
create table users (
userid int unsigned not null auto_increment,
name varchar(255),
mail varchar(255),
primary key (userid)
)type=innodb;create table imgphoto (
imgid int unsigned not null auto_increment,
imgname varchar(255),
imgtype varchar(255),
imgpath varchar(255),
tags varchar(255),
userid int unsigned,
key (userid),
foreign key (userid) references users (userid) ON DELETE SET NULL,
primary key (imgid)
)type=innodb;
でいけました。