Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL(InnoDB):需要删除列,并附带外键约束和索引_Mysql_Innodb_Mysql Error 1025_Mysql Error 1091 - Fatal编程技术网

MySQL(InnoDB):需要删除列,并附带外键约束和索引

MySQL(InnoDB):需要删除列,并附带外键约束和索引,mysql,innodb,mysql-error-1025,mysql-error-1091,Mysql,Innodb,Mysql Error 1025,Mysql Error 1091,这是我的桌子: CREATE TABLE `alums_alumphoto` ( `id` int(11) NOT NULL auto_increment, `alum_id` int(11) NOT NULL, `photo_id` int(11) default NULL, `media_id` int(11) default NULL, `updated` datetime NOT NULL, PRIMARY KEY (`id`),

这是我的桌子:

CREATE TABLE `alums_alumphoto` (  
  `id` int(11) NOT NULL auto_increment,  
  `alum_id` int(11) NOT NULL,  
  `photo_id` int(11) default NULL,  
  `media_id` int(11) default NULL,  
  `updated` datetime NOT NULL,  
  PRIMARY KEY  (`id`),  
  KEY `alums_alumphoto_alum_id` (`alum_id`),  
  KEY `alums_alumphoto_photo_id` (`photo_id`),  
  KEY `alums_alumphoto_media_id` (`media_id`),  
  CONSTRAINT `alums_alumphoto_ibfk_1` FOREIGN KEY (`media_id`) REFERENCES `media_mediaitem` (`id`),  
  CONSTRAINT `alum_id_refs_id_706915ea` FOREIGN KEY (`alum_id`) REFERENCES `alums_alum` (`id`),  
  CONSTRAINT `photo_id_refs_id_63282119` FOREIGN KEY (`photo_id`) REFERENCES `media_mediaitem` (`id`)  
) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=utf8  
我想删除列
photo\u id
,这可能还需要删除外键约束和索引

问题是,我在尝试删除列时出错:

ERROR 1025 (HY000): Error on rename of '.\dbname\#sql-670_c5c' to '.\dbname\alums_alumphoto' (errno: 150) 错误1025(HY000):将“.\dbname\#sql-670_c5c”重命名为“.\dbname\alums_alumphoto”时出错(错误号:150) 。。。当我尝试删除索引(如上所述)时,以及当我尝试删除外键约束时:

ERROR 1091 (42000): Can't DROP 'photo_id_refs_id_63282119'; check that column/key exists) 错误1091(42000):无法删除'photo_id_refs_id_63282119';检查列/键是否存在)
我应该按什么顺序做这一切?我应该使用什么精确的命令?

确定的事情是创建一个重复的表

> CREATE TABLE alums_alumphoto_new LIKE alums_alumphoto;
> ALTER TABLE .... // Drop constraint
> ALTER TABLE .... // Drop KEY
> ALTER TABLE .... // Drop the column
> INSERT INTO alums_alumphoto_new (SELECT id, alum_id, photo_id, media_id, updated FROM alums_alumphoto);
> RENAME TABLE alums_alumphoto TO alums_alumphoto_old, alums_alumphoto_new TO alums_alumphoto;
如果执行重命名表时出错,其他一些表可能具有引用此表的外键约束,在这种情况下,整个方法都很愚蠢。:)

准确地说,试试这个:

首先删除外键或约束:

ALTER TABLE `alums_alumphoto` DROP FOREIGN KEY `photo_id_refs_id_63282119`;
上一个命令删除列上的外键约束。现在可以删除列
photo\u id
(MySQL在删除列时会删除索引):

在本机上,您可以将这两个操作合并为一个操作:

ALTER TABLE `alums_alumphoto` 
   DROP FOREIGN KEY `photo_id_refs_id_63282119` , 
   DROP COLUMN `photo_id`;

尝试组合DROP KEY和DROP外键语句

ALTER TABLE `alums_alumphoto` 
    DROP KEY KEY `alums_alumphoto_photo_id`,
    DROP FOREIGN KEY `photo_id_refs_id_63282119`;

ALTER TABLE `alums_alumphoto` 
    DROP COLUMN `photo_id`;

您是否尝试过在同一ALTER语句中删除列和索引?
ALTER TABLE `alums_alumphoto` 
    DROP KEY KEY `alums_alumphoto_photo_id`,
    DROP FOREIGN KEY `photo_id_refs_id_63282119`;

ALTER TABLE `alums_alumphoto` 
    DROP COLUMN `photo_id`;