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

จำเป็นต้องตั้ง PRIMARY KEY สำหรับ AUTO_INCREMENT ใน MySQL หรือไม่?

คำตอบสั้น: ใช่ ควรใช้ AUTO_INCREMENT ร่วมกับ PRIMARY KEY

ใน MySQL คอลัมน์ที่ตั้งค่า AUTO_INCREMENT ต้องเป็น Primary Key หรือมี Unique Index อยู่แล้ว มิฉะนั้นจะเกิดข้อผิดพลาด นี่เป็นข้อกำหนดของระบบเพื่อให้แน่ใจว่าค่าที่สร้างขึ้นมานั้นไม่ซ้ำกันและสามารถระบุแถว (row) ได้อย่างถูกต้อง

ตัวอย่างการสร้างตาราง

mysql> CREATE TABLE DemoTable (
    EmployeeId INT NOT NULL AUTO_INCREMENT,
    EmployeeName VARCHAR(40),
    EmployeeAge INT,
    PRIMARY KEY (EmployeeId),
    UNIQUE KEY (EmployeeName, EmployeeAge)
);

ตรวจสอบโครงสร้างตาราง

mysql> DESC DemoTable;

ผลลัพธ์:

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

ทดสอบเพิ่มข้อมูล

mysql> INSERT INTO DemoTable (EmployeeName, EmployeeAge) VALUES ('Chris', 25);
mysql> INSERT INTO DemoTable (EmployeeName, EmployeeAge) VALUES ('Robert', 34);
mysql> INSERT INTO DemoTable (EmployeeName, EmployeeAge) VALUES ('Mike', 32);

ดูข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable;

ผลลัพธ์:

+------------+--------------+-------------+
| EmployeeId | EmployeeName | EmployeeAge |
+------------+--------------+-------------+
| 1          | Chris        | 25          |
| 3          | Mike         | 32          |
| 2          | Robert       | 34          |
+------------+--------------+-------------+

สรุป

  • AUTO_INCREMENT ทำงานได้ก็ต่อเมื่อคอลัมน์นั้นเป็น PRIMARY KEY หรือมี UNIQUE INDEX
  • PRIMARY KEY ให้การระบุแถวได้เร็วที่สุดและป้องกันค่าซ้ำอัตโนมัติ
  • หากไม่ต้องการเป็น PRIMARY KEY ต้องสร้าง UNIQUE INDEX ให้คอลัมน์นั้นแทน