1

次の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 (...)最後のコマンド (つまり)で次のエラーが発生しました。

Erreur 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`)
4

1 に答える 1

0

古い質問ですが、同様の状況にある他の人のために、私が行った答えは次のとおりです。

https://dba.stackexchange.com/a/87587/56052

役立つかもしれません。

  • 以前と同じ外部キー仕様でテーブルを再作成しますが、名前は異なります。
  • 結果のテーブルを削除します (元の孤立した外部キ​​ーも削除します)
  • 元のキーまたは外部キーなしでテーブルを再作成します
于 2015-01-05T17:14:40.950 に答える