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

ใช้ MySQL INSERT MAX()+1 หรือไม่


คุณต้องใช้ฟังก์ชัน COALESCE() สำหรับสิ่งนี้ ไวยากรณ์มีดังนี้:

INSERT INTO yourTableName(yourColumnName1,yourColumnName2)SELECT 1 + COALESCE((SELECT MAX(yourColumnName1) FROM yourTableName WHERE yourColumnName2='yourValue'), 0), 'yourValue';

เพื่อให้เข้าใจไวยากรณ์ข้างต้น ให้เราสร้างตาราง แบบสอบถามเพื่อสร้างตารางมีดังนี้:

mysql> สร้างตาราง InsertMaxPlus1Demo -> ( -> Id int, -> Name varchar(20) -> );Query OK, 0 แถวได้รับผลกระทบ (1.27 วินาที)

ตอนนี้คุณสามารถแทรกบางระเบียนในตารางโดยใช้คำสั่งแทรก แบบสอบถามมีดังนี้:

mysql> แทรกลงในค่า InsertMaxPlus1Demo(Id,Name) (1,'John');Query OK, 1 แถวได้รับผลกระทบ (0.12 วินาที)mysql> แทรกลงในค่า InsertMaxPlus1Demo(Id,Name) (1,'Mike');แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.21 วินาที)mysql> แทรกลงในค่า InsertMaxPlus1Demo(Id,Name) (2,'John');Query OK, 1 แถวที่ได้รับผลกระทบ (0.12 วินาที)mysql> แทรกลงใน InsertMaxPlus1Demo(Id,Name) ค่า (1,'Larry');แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.20 วินาที)mysql> แทรกลงใน InsertMaxPlus1Demo(Id,Name) ค่า(3,'John');แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.18 วินาที)mysql> แทรกลงในค่า InsertMaxPlus1Demo(Id,Name)(2,'David');แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.17 วินาที)

แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select แบบสอบถามมีดังนี้:

mysql> เลือก *จาก InsertMaxPlus1Demo;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+------+-------+| รหัส | ชื่อ |+------+-------+| 1 | จอห์น || 1 | ไมค์ || 2 | จอห์น || 1 | แลร์รี่ || 3 | จอห์น || 2 | David |+------+-------+6 แถวในชุด (0.00 วินาที)

นี่คือข้อความค้นหาที่จะแทรก MAX()+1:

mysql> INSERT INTO InsertMaxPlus1Demo (Id, Name) -> SELECT 1 + coalesce((SELECT max(Id) FROM InsertMaxPlus1Demo WHERE Name='John'), 0), 'John';แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว ( 0.21 วินาที) บันทึก:1 รายการซ้ำ:0 คำเตือน:0

ข้อความค้นหาด้านบนกำลังตรวจสอบ John มีรหัส 3 และบันทึกจะถูกแทรกด้วยรหัส 4

ตรวจสอบเรกคอร์ดตารางอีกครั้งโดยใช้คำสั่ง select แบบสอบถามมีดังนี้:

mysql> เลือก *จาก InsertMaxPlus1Demo;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+------+-------+| รหัส | ชื่อ |+------+-------+| 1 | จอห์น || 1 | ไมค์ || 2 | จอห์น || 1 | แลร์รี่ || 3 | จอห์น || 2 | เดวิด || 4 | John |+------+-------+7 แถวในชุด (0.00 วินาที)