สามารถใช้ INSERT INTO ... SELECT ลงตารางที่มี AUTO_INCREMENT Primary Key ได้ โดยระบุค่า PK เอง (Override) หรือปล่อยให้ Auto Generate
ตัวอย่าง: ระบุค่า UserId เอง (Override Auto Increment)
1. สร้างตารางมี AUTO_INCREMENT
mysql> create table DemoTable1923 (
-> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName varchar(20)
-> ); Query OK, 0 rows affected (0.00 sec)
2. INSERT INTO SELECT พร้อมระบุ UserId
mysql> insert into DemoTable1923(UserId, UserName)
-> select 101 as UserId, 'Chris' as UserName;
Query OK, 1 row affected (0.00 sec) Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into DemoTable1923(UserId, UserName)
-> select 102 as UserId, 'Robert' as UserName;
Query OK, 1 row affected (0.00 sec) Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into DemoTable1923(UserId, UserName)
-> select 103 as UserId, 'Sam' as UserName;
Query OK, 1 row affected (0.00 sec) Records: 1 Duplicates: 0 Warnings: 0
3. ตรวจสอบผลลัพธ์
mysql> select * from DemoTable1923;
+--------+----------+ | UserId | UserName | +--------+----------+ | 101 | Chris | | 102 | Robert | | 103 | Sam | +--------+----------+ 3 rows in set (0.00 sec)
กรณี: ไม่ระบุ PK ให้ Auto Generate
INSERT INTO DemoTable1923(UserName) SELECT 'NewUser' FROM DUAL; -- หรือ SELECT 'NewUser' LIMIT 1 -- หรือจากตารางอื่น INSERT INTO DemoTable1923(UserName) SELECT ClientName FROM DemoTable1900;
ข้อควรระวังกับ AUTO_INCREMENT
- ถ้าระบุค่า PK เอง ค่าต้องไม่ซ้ำ (Unique)
- ค่า Auto Increment ตัวถัดไปจะเป็น MAX(PK) + 1 ไม่สนใจค่าที่ Insert แบบ Manual
- ใช้
ALTER TABLE t AUTO_INCREMENT = 1000รีเซ็ตค่าเริ่มต้น
คัดลอกข้อมูลระหว่างตารางที่มี AUTO_INCREMENT
-- ตารางปลายทางมี AUTO_INCREMENT ใหม่ INSERT INTO target_table (name, email) SELECT name, email FROM source_table; -- target_id จะ Auto Generate -- ต้องการเก็บ ID เดิม INSERT INTO target_table (id, name, email) SELECT id, name, email FROM source_table; -- ต้องปิด FK Check ถ้ามี Duplicate
สรุป: INSERT INTO ... SELECT ลงตาราง AUTO_INCREMENT ได้ทั้งระบุ PK เอง (Override) หรือปล่อย Auto Generate โดยละคอลัมน์ PK ออกจาก Column List