PHP で MySQL を操作するのに役立つリファレンス

MySQL FAQ

AUTO_INCREMENT の列はテーブル内に何個設定できますか?

スポンサードリンク
AUTO_INCREMENT の列は 1 個のテーブルに 1 列だけ設定可能です。

MySQL では AUTO_INCREMENT の列はテーブル 1 個あたり 1 列だけ設定できます。

1 個のテーブル に AUTO_INCREMENT を 2 列以上設定しようとすると ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key というエラーが発生します。コードを実際に実行して確認してみましょう。

サンプルコード(AUTO_INCREMENT 2 列でテーブル作成)
CREATE TABLE TEST1 (
    CODE1   INT AUTO_INCREMENT,
    CODE2   INT AUTO_INCREMENT,
    /* AUTO_INCREMENT 列は INDEX の設定が必要 */ 
    INDEX(CODE1,CODE2)
);
mysql> CREATE TABLE TEST1 (
    ->     CODE1   INT AUTO_INCREMENT,
    ->     CODE2   INT AUTO_INCREMENT,
    ->     /* AUTO_INCREMENT 列は INDEX の設定が必要 */
    ->     INDEX(CODE1,CODE2)
    -> );
ERROR 1075 (42000): Incorrect table definition; there can be only one auto colum
n and it must be defined as a key
mysql>

ちなみに既に AUTO_INCREMENT の列があるテーブルに AUTO_INCREMENT の列を追加しようとしても同様のエラーが発生します。

サンプルコード(AUTO_INCREMENT の列を後から追加)
/* 最初は AUTO_INCREMENT の列無しでテーブル作成 */
CREATE TABLE TEST1 (
    CODE1 INT
);

/* TEST1 に AUTO_INCREMENT の列を 1 列追加 → 1 列なら問題なし */
ALTER TABLE TEST1 
ADD COLUMN CODE2 INT AUTO_INCREMENT, ADD INDEX (CODE2);

/* TEST1 に AUTO_INCREMENT の列を 1 列追加 → 2 列目なのでエラー */
ALTER TABLE TEST1 
ADD COLUMN CODE3 INT AUTO_INCREMENT, ADD INDEX (CODE3);

/* TEST1 のテーブル定義を確認 */
DESC TEST1;

実行結果は次の通りです。AUTO_INCREMENT の列を 2 列に増やそうとするとエラーが発生します。

mysql> /* 最初は AUTO_INCREMENT の列なしでテーブル作成 */
mysql> CREATE TABLE TEST1 (
    ->     CODE1 INT
    -> );
Query OK, 0 rows affected (0.08 sec)

mysql>
mysql> /* TEST1 に AUTO_INCREMENT の列を 1 列追加 → 1 列なら問題なし */
mysql> ALTER TABLE TEST1
    -> ADD COLUMN CODE2 INT AUTO_INCREMENT, ADD INDEX (CODE2);
Query OK, 0 rows affected (0.16 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>
mysql> /* TEST1 に AUTO_INCREMENT の列を 1 列追加 → 2 列目なのでエラー */
mysql> ALTER TABLE TEST1
    -> ADD COLUMN CODE3 INT AUTO_INCREMENT, ADD INDEX (CODE3);
ERROR 1075 (42000): Incorrect table definition; there can be only one auto colum
n and it must be defined as a key  ← エラー発生 
mysql>
mysql> /* TEST1 のテーブル定義を確認 */
mysql> DESC TEST1;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| CODE1 | int(11) | YES  |     | NULL    |                |
| CODE2 | int(11) | NO   | MUL | NULL    | auto_increment |
+-------+---------+------+-----+---------+----------------+
2 rows in set (0.03 sec)

mysql>
スポンサードリンク

AUTO_INCREMENT

その他のカテゴリー一覧