2012-01-05 2 views
0

Я пытаюсь перестроить мою базу данных, но я не могу пройти мимо каких-либо внешних ключей из таблиц, хотя я также звоню SET foreign_key_checks = 0; Из документов MySQL, похоже, это все, что мне нужно сделать. Что еще мне нужно сделать?Что может привести к тому, что внешний ключ не сможет быть сброшен, даже если foreign_key_checks = 0?

SET foreign_key_checks=0; 
alter table galleries drop foreign key fk_page_gallery ; 
alter table photos drop foreign key fk_photo_gallery ; 

create table galleries (
    id   int(11) auto_increment not null , 
    page_id  int(11)       , 
    cover_id int     null  , 
    title  varchar(1024)     , 
    slug  varchar(1024)   not null , 
    description text     null  , 
    sort_order int(11)       , 
    published tinyint(1)    default 0, 
    created  varchar(20)      , 
    modified datetime       , 
    constraint pk_galleries primary key (id) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

create table pages (
    id    int(11) auto_increment not null , 
    menu_id   int(11)    not null , 
    title    varchar(1024)   not null , 
     slug    varchar(1024)   not null , 
    body    text     not null , 
    short_description varchar(1024)     , 
    published   tinyint(1)    default 0, 
    created   datetime       , 
    modified   datetime       , 
    constraint pk_pages primary key (id) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

SET foreign_key_checks=1; 

И для справки:

mysql> SHOW CREATE TABLE galleries; 
+-----------+-------------------------------------------+ 
| Table  | Create Table        | 
+-----------+-------------------------------------------+ 
| galleries | CREATE TABLE `galleries` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `page_id` int(11) DEFAULT NULL, 
    `cover_id` int(11) DEFAULT NULL, 
    `title` varchar(1024) DEFAULT NULL, 
    `slug` varchar(1024) NOT NULL, 
    `description` text, 
    `sort_order` int(11) DEFAULT NULL, 
    `published` tinyint(1) DEFAULT '0', 
    `created` varchar(20) DEFAULT NULL, 
    `modified` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `fk_page_gallery` (`page_id`), 
    KEY `fk_gallery_cover` (`cover_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 | 
+-----------+-------------------------------------------+ 
1 row in set (0.00 sec) 

mysql> SHOW CREATE TABLE pages; 
+-------+-----------------------------------------------+ 
| Table | Create Table         | 
+-------+-----------------------------------------------+ 
| pages | CREATE TABLE `pages` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `menu_id` int(11) NOT NULL, 
    `title` varchar(1024) NOT NULL, 
    `slug` varchar(1024) NOT NULL, 
    `body` text NOT NULL, 
    `short_description` varchar(1024) DEFAULT NULL, 
    `published` tinyint(1) DEFAULT '0', 
    `created` datetime DEFAULT NULL, 
    `modified` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `fk_pages_menu` (`menu_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 | 
+-------+-----------------------------------------------+ 
+0

Отказ от ограничений FK - это самое худшее, что вы можете сделать ... Я видел, как это произошло несколько раз, и в каждом случае он вернулся, чтобы преследовать инженерную команду в упущенное время, сократил сроки, а в некоторых случаях случаев вблизи критических состояний в физических ресурсах. –

+0

Это во время разработки, так что это не проблема. – openback

ответ

0

внешних ключей в ваших создания таблицы отчетности отличаются от тех, в ваших заявлениях падения. Более того, ваши определения таблиц вообще не имеют внешних ключей. MySQL может выбросить странную ошибку, если вы попытаетесь сбросить внешний ключ, которого нет.

+0

После перечитывания вашего комментария, теперь я вижу, что мои внешние ключи были созданы, вместо этого есть простые клавиши! Это объясняет все ошибки. Теперь, чтобы понять, почему [Parse :: Dia :: SQL] (http://search.cpan.org/~aff/Parse-Dia-SQL/bin/parsediasql) решил это сделать. Благодаря! – openback

Смежные вопросы