エラーコード辞典
🚨 mysql-1075 MySQL Error #1075: AUTO_INCREMENT 列は1個・インデックス必須
AUTO_INCREMENT カラムにインデックス(PRIMARY KEY等)が無い
原因
phpMyAdmin で AUTO_INCREMENT を後から付けようとすると発生しがちです。AUTO_INCREMENT は必ずインデックス(通常は PRIMARY KEY)が必要です。 また 1 テーブルに AUTO_INCREMENT は 1 列までという制約もあるため、 2 つ目を追加しようとしても 1075 が出ます。
なぜ起きるか (内部仕組み)
MySQL は AUTO_INCREMENT 値を効率的に発行するため、 対象カラムが索引化されている必要があります。 PRIMARY KEY が標準ですが、 UNIQUE 索引でも OK です。 索引が無いと、 次の番号を取得するために毎回テーブル全体を走査する必要があり、 設計上許可されていません。
よくあるシナリオ
1. CREATE TABLE で `id INT AUTO_INCREMENT, name VARCHAR(255)` のように PRIMARY KEY 指定を忘れた。 2. ALTER TABLE で AUTO_INCREMENT を追加したが PRIMARY KEY を先に設定していなかった。 3. 1 つのテーブルに「ユーザー ID と 注文番号」 を両方 AUTO_INCREMENT にしようとした (= 不可)。
対処方法
対象カラムを PRIMARY KEY に設定してから AUTO_INCREMENT を有効化します。`ALTER TABLE users ADD PRIMARY KEY (id), MODIFY id INT AUTO_INCREMENT;`。 既に他の列に PRIMARY KEY があって id に AUTO_INCREMENT したい場合は、 id を UNIQUE 索引にすれば OK です。
再発防止 / 予防策
マイグレーションを Doctrine Migrations や Phinx 等の専用ツールで管理し、 CREATE TABLE 時に PRIMARY KEY を明示する習慣を CI lint で強制します。