たとえば、主キーはあるが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)
これをMacOSXのMySQL5.0.51でテストしました。
ENGINE=InnoDB
でもテストしました および従属テーブル。 id
を変更する 列定義は参照整合性を妨げません。
コメントで言及したエラー150に対応するには、外部キー制約との競合である可能性があります。申し訳ありませんが、テストした後、うまくいくと思いました。問題の診断に役立つ可能性のあるリンクをいくつか示します。
- mysqlエラー1025(HY000):'./foo'(errorno:150)の名前変更時のエラーはどういう意味ですか?
- http://www.simplicidade.org/notes/ archives / 2008/03 / mysql_errno_150.html