Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách đổi khóa chính MySQL thành AUTO_INCREMENT

Để thêm thuộc tính AUTO_INCREMENT cho cột khóa chính đã có, dùng ALTER TABLE ... MODIFY.

Ví dụ minh họa

Tạo bảng khóa chính không auto_increment:

CREATE TABLE changePrimaryKeyInAutoIncrement (
    StudentId INT NOT NULL PRIMARY KEY,
    StudentName VARCHAR(100),
    StudentAge INT,
    StudentAddress VARCHAR(100)
);

Kiểm tra cấu trúc:

+----------------+--------------+------+-----+---------+-------+
| 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    |       |
+----------------+--------------+------+-----+---------+-------+

Thay đổi cột StudentId thành AUTO_INCREMENT:

ALTER TABLE changePrimaryKeyInAutoIncrement
MODIFY StudentId INT AUTO_INCREMENT;

Cấu trúc mới:

+----------------+--------------+------+-----+---------+----------------+
| 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    |                |
+----------------+--------------+------+-----+---------+----------------+

Lưu ý:

  • MODIFY yêu cầu nêu lại toàn bộ định nghĩa cột (kiểu, NULL/NOT NULL, DEFAULT...).
  • Cột phải là khóa chính (PRIMARY KEY) hoặc UNIQUE KEY không NULL.
  • Nếu bảng đã có dữ liệu, giá trị AUTO_INCREMENT sẽ được set = max(Id) + 1.
  • MySQL 8.0+ hỗ trợ ALTER TABLE ... ALTER COLUMN ... SET DEFAULT cho generated column, nhưng AUTO_INCREMENT vẫn dùng MODIFY.