3

外部キーが交差した2つのテーブルを作成しようとしていますが、作成時に存在しないテーブルを参照することはできません。mysql用にこのようなテーブルを作成する方法はありますか?両方のテーブルを同時に宣言したり、外部キーの評価を遅らせたりするような方法はありますか?

エラーは1005です:mysql 5.0でテーブルblocks.frm(errno 150)を作成できません

SQL:

create table if not exists blocks( 
    id int unsigned not null auto_increment, 
    title varchar(100),
    defaultpage int unsigned not null, 
    foreign key(defaultpage) references pages(pageID), 
    primary key(id)) engine=innodb;

create table if not exists pages( 
    pageID int unsigned not null auto_increment, 
    title varchar(50) not null, 
    content blob,  
    blockid int unsigned not null, 
    foreign key(blockid) references block(id), 
    primary key(pageID) ) engine=innodb;

問題を解決する適切な方法は何ですか?

4

2 に答える 2

5

cletusの答え(これは完全に正しい)をコードにもたらします...

create table if not exists pages( 
    pageID int unsigned not null auto_increment, 
    title varchar(50) not null, 
    content blob,  
    blockid int unsigned not null, 
    primary key(pageID) ) engine=innodb;

create table if not exists blocks( 
    id int unsigned not null auto_increment, 
    title varchar(100),
    defaultpage int unsigned not null, 
    foreign key(defaultpage) references pages(pageID), 
    primary key(id)) engine=innodb;

alter table pages add constraint fk_pages_blockid foreign key (blockid) references blocks (id);
于 2009-02-15T18:20:56.643 に答える
0

テーブルが作成されるまで、外部キーのチェックを遅らせることができます。

SET FOREIGN_KEY_CHECKS = 0;
CREATE TABLE ...;
SET FOREIGN_KEY_CHECKS = 1;
于 2009-02-15T20:42:29.347 に答える