めも帖

「めも帖」代わりにダラダラと書いていったり、めもしたりしているだけです。

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;


でいけました。