Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL: เปลี่ยน Primary Key ให้เป็น AUTO_INCREMENT ด้วย MODIFY

การเปลี่ยน 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 ตารางนาน