Misalnya, berikut adalah tabel yang memiliki kunci utama tetapi bukan AUTO_INCREMENT
:
mysql> CREATE TABLE foo (
id INT NOT NULL,
PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);
Anda dapat MODIFY
kolom untuk mendefinisikan ulang dengan AUTO_INCREMENT
pilihan:
mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
Verifikasi bahwa ini telah diterapkan:
mysql> SHOW CREATE TABLE foo;
Keluaran:
CREATE TABLE foo (
`id` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
Perhatikan bahwa Anda telah memodifikasi definisi kolom di tempatnya, tanpa perlu membuat kolom kedua dan menghapus kolom asli. PRIMARY KEY
batasan tidak terpengaruh, dan Anda tidak perlu menyebutkannya di ALTER TABLE
pernyataan.
Selanjutnya Anda dapat menguji bahwa sisipan menghasilkan nilai baru:
mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;
Keluaran:
+----+
| id |
+----+
| 1 |
| 2 |
| 5 |
| 6 |
+----+
4 rows in set (0.00 sec)
Saya menguji ini di MySQL 5.0.51 di Mac OS X.
Saya juga menguji dengan ENGINE=InnoDB
dan tabel dependen. Mengubah id
definisi kolom tidak mengganggu integritas referensial.
Untuk menanggapi kesalahan 150 yang Anda sebutkan dalam komentar Anda, itu mungkin konflik dengan batasan kunci asing. Maaf, setelah saya mengujinya, saya pikir itu akan berhasil. Berikut adalah beberapa tautan yang dapat membantu mendiagnosis masalah:
- Apa yang dimaksud dengan kesalahan mysql 1025 (HY000):Kesalahan saat mengganti nama './foo' (errorno:150)?
- http://www.simplicidade.org/notes/ archives/2008/03/mysql_errno_150.html