Có, bạn có thể thêm AUTO_INCREMENT sau khi tạo bảng bằng ALTER TABLE ... MODIFY COLUMN.
Ví dụ: Bảng quên AUTO_INCREMENT
Tạo bảng không có AUTO_INCREMENT:
mysql> CREATE TABLE forgetToSetAutoIncrementDemo (
-> StudentId INT,
-> StudentName VARCHAR(30)
-> );
Kiểm tra cấu trúc - chưa có auto_increment:
+-------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+-------+ | StudentId | int(11) | YES | | NULL | | | StudentName | varchar(30) | YES | | NULL | | +-------------+-------------+------+-----+---------+-------+
Thêm AUTO_INCREMENT và PRIMARY KEY
mysql> ALTER TABLE forgetToSetAutoIncrementDemo MODIFY COLUMN StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY; Query OK, 0 rows affected (2.12 sec)
Kiểm tra lại - đã có auto_increment:
+-------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+----------------+ | StudentId | int(11) | NO | PRI | NULL | auto_increment | | StudentName | varchar(30) | YES | | NULL | | +-------------+-------------+------+-----+---------+----------------+
Chèn dữ liệu kiểm tra
mysql> INSERT INTO forgetToSetAutoIncrementDemo(StudentName) VALUES
('Larry'), ('Chris'), ('Robert');
mysql> SELECT * FROM forgetToSetAutoIncrementDemo;
Kết quả - StudentId tự động gán 1,2,3:
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Larry | | 2 | Chris | | 3 | Robert | +-----------+-------------+
Lưu ý quan trọng
- Cột phải là
NOT NULLđể làm AUTO_INCREMENT - Thường kết hợp với
PRIMARY KEY(nhưng không bắt buộc) - Nếu bảng đã có data, MySQL sẽ tự gán giá trị cho các hàng hiện có
- Giá trị AUTO_INCREMENT tiếp theo = MAX(id) + 1
- Không thể thêm AUTO_INCREMENT cho cột không phải kiểu số nguyên (INT, BIGINT, etc.)
Cách khác: CHANGE COLUMN
ALTER TABLE table_name CHANGE COLUMN col_name col_name INT AUTO_INCREMENT PRIMARY KEY;
MODIFY giữ nguyên tên cột, CHANGE cho phép đổi tên cột.