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

ความสำคัญของลำดับคอลัมน์ใน SET ของ UPDATE ใน MySQL

ลำดับคอลัมน์ในเงื่อนไข 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 ทำให้ผลลัพธ์ต่างกันมาก