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

อัปเดตแถวที่มี ID สูงสุดด้วยคำสั่งเดียวใน MySQL

ใช้ ORDER BY ... LIMIT ใน UPDATE เพื่อแก้ไขแถวสุดท้าย

MySQL รองรับ ORDER BY และ LIMIT ในคำสั่ง UPDATE ทำให้อัปเดตแถวที่มี ID สูงสุด (หรือเงื่อนไขอื่นๆ) ได้ในคำสั่งเดียวโดยไม่ต้อง Subquery

ตัวอย่างสร้างตารางและข้อมูล

CREATE TABLE DemoTable (ID INT, GameScore INT);
INSERT INTO DemoTable VALUES (15, 848747), (13, 909049), (34, 98474646), (31, 948474);

ข้อมูลก่อนอัปเดต

+------+-----------+
| ID   | GameScore |
+------+-----------+
| 15   | 848747    |
| 13   | 909049    |
| 34   | 98474646  |
| 31   | 948474    |
+------+-----------+

คำสั่งอัปเดตแถว ID สูงสุด (34) เพิ่ม Score 10

UPDATE DemoTable 
SET GameScore = GameScore + 10 
ORDER BY ID DESC 
LIMIT 1;

ข้อมูลหลังอัปเดต

+------+-----------+
| ID   | GameScore |
+------+-----------+
| 15   | 848747    |
| 13   | 909049    |
| 34   | 98474656  |
| 31   | 948474    |
+------+-----------+

คำอธิบาย:

  • ORDER BY ID DESC เรียง ID จากมากไปน้อย (34, 31, 15, 13)
  • LIMIT 1 จำกัดเฉพาะแถวแรกของผลลัพธ์ที่เรียงแล้ว (คือ ID=34)
  • รองรับใน DELETE เช่นกัน: DELETE FROM DemoTable ORDER BY ID DESC LIMIT 1;

⚠ ข้อจำกัด:

  • ไม่รองรับใน Standard SQL / Database อื่นๆ (PostgreSQL, SQL Server ใช้ Subquery/CTE)
  • หากมี WHERE ให้วางก่อน ORDER BY: UPDATE ... WHERE ... ORDER BY ... LIMIT ...
  • ไม่ควรใช้กับ Replication (Statement-based) เพราะลำดับอาจต่างกันบน Slave

วิธี Standard SQL (Subquery):

UPDATE DemoTable 
SET GameScore = GameScore + 10 
WHERE ID = (SELECT MAX(ID) FROM DemoTable);