たとえば、主キーはあるがそうでないテーブルは次のとおりですAUTO_INCREMENT
。
mysql> CREATE TABLE foo (
id INT NOT NULL,
PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);
次のオプションMODIFY
を使用して、列を再定義できます。AUTO_INCREMENT
mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
これが有効になったことを確認します。
mysql> SHOW CREATE TABLE foo;
出力:
CREATE TABLE foo (
`id` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
2 番目の列を作成して元の列を削除する必要なく、列定義をその場で変更したことに注意してください。制約は影響を受けず、ステートメントPRIMARY KEY
で言及する必要はありません。ALTER TABLE
次に、挿入が新しい値を生成することをテストできます。
mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;
出力:
+----+
| id |
+----+
| 1 |
| 2 |
| 5 |
| 6 |
+----+
4 rows in set (0.00 sec)
これを Mac OS X 上の MySQL 5.0.51 でテストしました。
ENGINE=InnoDB
また、依存テーブルを使用してテストしました。列定義を変更しても、id
参照整合性は中断されません。
コメントで言及したエラー 150 に対応するには、おそらく外部キー制約との競合です。申し訳ありませんが、テストした後、うまくいくと思いました。問題の診断に役立つ可能性があるいくつかのリンクを次に示します。