0

データベースを再構築しようとしていますが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 |
+-------+-----------------------------------------------+
4

1 に答える 1

0

create table ステートメントの外部キーは、drop ステートメントの外部キーとは異なります。さらに、テーブル定義には外部キーがまったくないようです。そこにない外部キーを削除しようとすると、MySQL は奇妙なエラーをスローすることがあります。

于 2012-01-05T07:07:05.553 に答える