Có, cột AUTO_INCREMENT phải là khóa chính (PRIMARY KEY) hoặc ít nhất là khóa duy nhất (UNIQUE KEY).
Tạo bảng với AUTO_INCREMENT trên PRIMARY KEY:
mysql> CREATE TABLE DemoTable (
EmployeeId INT NOT NULL AUTO_INCREMENT,
EmployeeName VARCHAR(40),
EmployeeAge INT,
PRIMARY KEY(EmployeeId),
UNIQUE KEY(EmployeeName,EmployeeAge)
); Query OK, 0 rows affected (0.96 sec)
Kiểm tra cấu trúc:
mysql> DESC DemoTable;
Kết quả (Key PRI = Primary, MUL = Multiple/Index):
+--------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+----------------+ | EmployeeId | int(11) | NO | PRI | NULL | auto_increment | | EmployeeName | varchar(40) | YES | MUL | NULL | | | EmployeeAge | int(11) | YES | | NULL | | +--------------+-------------+------+-----+---------+----------------+ 3 rows in set (0.17 sec)
Chèn dữ liệu (không truyền EmployeeId):
mysql> INSERT INTO DemoTable(EmployeeName,EmployeeAge) VALUES('Chris',25); Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable(EmployeeName,EmployeeAge) VALUES('Robert',34); Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable(EmployeeName,EmployeeAge) VALUES('Mike',32); Query OK, 1 row affected (0.09 sec)
Hiển thị dữ liệu (EmployeeId tự gán 1,3,2 — thứ tự INSERT):
mysql> SELECT * FROM DemoTable;
Kết quả:
+------------+--------------+-------------+ | EmployeeId | EmployeeName | EmployeeAge | +------------+--------------+-------------+ | 1 | Chris | 25 | | 3 | Mike | 32 | | 2 | Robert | 34 | +------------+--------------+-------------+ 3 rows in set (0.00 sec)
Quy tắc: Mỗi bảng chỉ được một cột AUTO_INCREMENT, và cột đó phải được index (PRIMARY KEY hoặc UNIQUE).