การเปลี่ยน Primary Key ให้เป็น AUTO_INCREMENT หลังสร้างตารางแล้ว
ใช้ ALTER TABLE ... MODIFY COLUMN เปลี่ยน Definition ของคอลัมน์ Primary Key ให้เพิ่ม AUTO_INCREMENT เข้าไป
ตัวอย่างการใช้งาน
สร้างตาราง PK แบบ Manual (ไม่ Auto):
mysql> CREATE TABLE changePrimaryKeyInAutoIncrement (
-> StudentId INT NOT NULL PRIMARY KEY,
-> StudentName VARCHAR(100),
-> StudentAge INT,
-> StudentAddress VARCHAR(100)
-> );
Query OK, 0 rows affected (0.63 sec)
ตรวจสอบโครงสร้าง (ยังไม่มี auto_increment):
mysql> DESC changePrimaryKeyInAutoIncrement;
+----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| StudentId | int(11) | NO | PRI | NULL | |
| StudentName | varchar(100) | YES | | NULL | |
| StudentAge | int(11) | YES | | NULL | |
| StudentAddress | varchar(100) | YES | | NULL | |
+----------------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
เปลี่ยนเป็น AUTO_INCREMENT:
mysql> ALTER TABLE changePrimaryKeyInAutoIncrement MODIFY StudentId INT AUTO_INCREMENT;
Query OK, 0 rows affected (1.48 sec)
Records: 0 Duplicates: 0 Warnings: 0
ตรวจสอบอีกครั้ง (มี auto_increment แล้ว):
mysql> DESC changePrimaryKeyInAutoIncrement;
+----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+----------------+
| StudentId | int(11) | NO | PRI | NULL | auto_increment |
| StudentName | varchar(100) | YES | | NULL | |
| StudentAge | int(11) | YES | | NULL | |
| StudentAddress | varchar(100) | YES | | NULL | |
+----------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
คำอธิบาย
MODIFY COLUMN(หรือMODIFYเพียงอย่างเดียว) ใช้เปลี่ยน Definition ของคอลัมน์ที่มีอยู่- ต้องระบุชนิดข้อมูลเต็มรูปแบบ:
INT AUTO_INCREMENT(ไม่ใช่แค่ ADD AUTO_INCREMENT) - คอลัมน์ต้องเป็น
PRIMARY KEYหรือUNIQUE NOT NULLก่อนแล้ว
ข้อควรระวัง
- หากตารางมีข้อมูลอยู่แล้ว MySQL จะ Renumber ตามลำดับฟิสิกส์ (อาจไม่เรียงตาม Id เดิม)
- InnoDB: ไม่สามารถ MODIFY PK ได้หากมี Foreign Key อ้างอิง (ต้อง Drop FK ก่อน)
- ค่า Auto Increment เริ่มต้น = MAX(Id) + 1 (หรือ 1 ถ้าว่าง)
- ใช้
CHANGE COLUMNได้เช่นกัน แต่ต้องระบุชื่อเก่าและใหม่:CHANGE COLUMN StudentId StudentId INT AUTO_INCREMENT
Best Practice
ออกแบบให้เป็น AUTO_INCREMENT ตั้งแต่ CREATE TABLE:
CREATE TABLE students (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
...
);
หลีกเลี่ยงการ ALTER ภายหลังซึ่งอาจ Lock ตารางนาน