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

Có bắt buộc PRIMARY KEY cho AUTO_INCREMENT trong MySQL không?

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).