ลำดับคอลัมน์ในเงื่อนไข SET ของ UPDATE สำคัญเพราะ MySQL ใช้ค่าที่อัปเดตแล้วของคอลัมน์ก่อนหน้าในการคำนวณคอลัมน์ถัดไป ใช่ มันจะทำให้ผลลัพธ์ต่างกันมาก ตัวอย่าง:
ตัวอย่าง
มีตาราง tender เขียน UPDATE โดยใช้ tender_id ก่อน rate แล้วสลับลำดับ:
mysql> SELECT * FROM tender; +-----------+---------+------+ | tender_id | company | rate | +-----------+---------+------+ | 200 | ABC | 1000 | | 300 | ABD | 6000 | | 301 | ABE | 7000 | | 302 | ABF | 3500 | | 303 | ABG | 3600 | +-----------+---------+------+ 5 rows in set (0.00 sec) mysql> UPDATE tender SET tender_id = tender_id + 100, rate = tender_id * 4 WHERE tender_id = 200; Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0
คำสั่งอัปเดต tender_id ก่อน แล้วค่อย rate ตามค่าใหม่ ผลลัพธ์:
mysql> SELECT * FROM tender; +-----------+---------+------+ | tender_id | company | rate | +-----------+---------+------+ | 300 | ABC | 1200 | | 300 | ABD | 6000 | | 301 | ABE | 7000 | | 302 | ABF | 3500 | | 303 | ABG | 3600 | +-----------+---------+------+ 5 rows in set (0.00 sec)
สลับลำดับ: อัปเดต rate ก่อน (ใช้ค่าเก่า) แล้วค่อย tender_id:
mysql> UPDATE tender SET rate = tender_id * 4, tender_id = tender_id + 200 WHERE company = 'ABD'; Query OK, 1 row affected (0.04 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM tender; +-----------+---------+------+ | tender_id | company | rate | +-----------+---------+------+ | 300 | ABC | 1200 | | 500 | ABD | 1200 | | 301 | ABE | 7000 | | 302 | ABF | 3500 | | 303 | ABG | 3600 | +-----------+---------+------+ 5 rows in set (0.00 sec)
การสลับลำดับคอลัมน์ใน SET ทำให้ผลลัพธ์ต่างกันมาก