【发布时间】:2013-05-31 12:36:27
【问题描述】:
当我执行以下 SQL 命令时:
CREATE TABLE `TableA` (
`tableAId` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`tableAId`)
);
CREATE TABLE `TableB` (
`tableBId` INT(11) NOT NULL AUTO_INCREMENT,
`tableAId` INT(11) DEFAULT NULL,
PRIMARY KEY (`tableBId`),
CONSTRAINT `FK_TABLE_A_ID` FOREIGN KEY (`tableAId`) REFERENCES `TableA` (`tableAId`)
);
ALTER TABLE `TableB`
RENAME TO `NewTableB`;
ALTER TABLE `TableA`
RENAME TO `NewTableA`,
CHANGE COLUMN `tableAId` `newTableAId` INT(11) NOT NULL AUTO_INCREMENT FIRST;
DROP TABLE IF EXISTS NewTableA;
DROP TABLE IF EXISTS NewTableB;
CREATE TABLE `TableA` (
`tableAId` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`tableAId`)
);
最后一条命令出现以下错误(即CREATE TABLE TableA (...)):
错误 SQL (1005): 无法创建表 'TableA' (errno: 150) 外部 键约束格式不正确
当我执行show engine innodb status 时,我有:
------------------------
LATEST FOREIGN KEY ERROR
------------------------
130531 12:06:05 Error in foreign key constraint of table TableB:
there is no index in referenced table which would contain
the columns as the first columns, or the data types in the
referenced table do not match the ones in table. Constraint:
,
CONSTRAINT `FK_TABLE_A_ID` FOREIGN KEY (`tableAId`) REFERENCES `NewTableA` (`tableAId`)
【问题讨论】:
-
您是否尝试在单独的查询中执行重命名表和
TableA的重命名列? -
对我来说听起来像是一个错误。它在这里的 5.1.46 上运行良好。你检查过 MySQL 错误跟踪器吗? (bugs.mysql.com)
-
比如可能和这个bug有关:bugs.mysql.com/bug.php?id=64922
标签: mysql database foreign-keys drop-table table-rename