web-dev-qa-db-ja.com

Mysql-自動増分を主キーに追加する

Mysqlに奇妙な問題があります。

主キーであり、auto_increment制約が定義されているテーブルの列を変更しようとしています。これは、他の複数のテーブルの外部キー参照でもあります。親とすべての子の両方で、この列の長さを変更する必要があります。

set foreign_key_checks=0;
alter table Parent  modify Identifier smallint(10) unsigned;
alter table Child_1 modify FK_Identifier smallint(10) unsigned;
alter table Child_2 modify FK_Identifier smallint(10) unsigned;
alter table Child_3 modify FK_Identifier  smallint(10) unsigned;
alter table Child_4 modify FK_Identifier smallint(10) unsigned;
alter table Child_5 modify FK_Identifier smallint(10) unsigned;
set foreign_key_checks=1;

これにより、親テーブルの自動インクリメントが削除されます。制約を元に戻す最善の方法は何でしょうか?

以下は失敗しているようです。

mysql> ALTER TABLE Parent MODIFY Identifier smallint(10) PRIMARY KEY AUTO_INCREMENT;
ERROR 1068 (42000): Multiple primary key defined


ALTER TABLE Parent MODIFY Identifier smallint(10) AUTO_INCREMENT;
------------------------
LATEST FOREIGN KEY ERROR
------------------------
110125 15:49:08 Error in foreign key constraint of table db/Child_1:
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 to the ones in table. Constraint:
,
  CONSTRAINT Child_1_ibfk_1 FOREIGN KEY (FK_Identifier) REFERENCES RoomProfile (Identifier) ON DELETE CASCADE ON UPDATE CASCADE
The index in the foreign key in table is PRIMARY

これを達成するためのより良い方法はありますか?

編集:作成を表示(変更後):

  CREATE TABLE `Parent` (
  `Identifier` smallint(10) unsigned NOT NULL default '0',
  `Name` varchar(20) default NULL,
  `Description` varchar(100) default NULL,
   PRIMARY KEY  (`Identifier`),
   UNIQUE KEY `Name` (`Name`),
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | 

変更前

`Identifier` smallint(5) unsigned NOT NULL AUTO_INCREMENT,

ありがとう!

17
Ricko M

MODIFYステートメントでPRIMARY KEYを指定する必要はありません。

ALTER TABLE Parent MODIFY Identifier smallint(10) AUTO_INCREMENT;
37
Arnaud Le Blanc