Скрещенные внешние ключи в SQL - PullRequest
3 голосов
/ 15 февраля 2009

Я пытаюсь получить 2 таблицы со скрещенными внешними ключами, но мне не разрешено ссылаться на таблицу, которая не существует, когда я их создаю. Любой способ создания таких таблиц для mysql, что-то вроде объявления обеих таблиц одновременно или задержки оценки внешних ключей?

Ошибка 1005: не удается создать таблицу blocks.frm (errno 150) в mysql 5.0

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;

Как правильно решить проблему?

Ответы [ 2 ]

5 голосов
/ 15 февраля 2009

Подведение ответа Клетуса (что совершенно правильно) к коду ...

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);
0 голосов
/ 15 февраля 2009

Вы можете отложить проверку внешнего ключа до создания таблиц:

SET FOREIGN_KEY_CHECKS = 0;
CREATE TABLE ...;
SET FOREIGN_KEY_CHECKS = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...