Что может привести к тому, что внешний ключ не сможет быть удален, даже если foreign_key_checks = 0? - PullRequest
0 голосов
/ 05 января 2012

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

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 |
+-------+-----------------------------------------------+

1 Ответ

0 голосов
/ 05 января 2012

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

...