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

ลำดับความสำคัญของคอลัมน์ในคำสั่ง SET ของคำสั่ง UPDATE คืออะไร? จะสร้างความแตกต่างอย่างมากในชุดผลลัพธ์ที่ส่งคืนโดย MySQL หรือไม่


ลำดับของคอลัมน์ในส่วนคำสั่ง SET ของคำสั่ง UPDATE มีความสำคัญเนื่องจาก MySQL ให้ค่าที่อัพเดตแก่ชื่อคอลัมน์ที่ใช้ในนิพจน์ ใช่ มันจะสร้างความแตกต่างอย่างมากในชุดผลลัพธ์ที่ส่งคืนโดย MySQL ต่อไปนี้เป็นตัวอย่างเพื่อให้ชัดเจน -

ตัวอย่าง

ในตัวอย่างนี้ เรากำลังมีตาราง 'ประกวดราคา' อันดับแรก เราจะเขียนคำสั่ง UPDATE โดยใช้ 'tender_id' เป็นคอลัมน์แรก และ 'rate' เป็นคอลัมน์ที่สองใน SET clause จากนั้นเราจะเขียนคำสั่ง UPDATE โดยใช้ 'rate' เป็นคอลัมน์แรก และ 'tender_id' เป็นคอลัมน์ที่สอง ตาราง 'ประกวดราคา'.

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' ตามค่าใหม่ของ 'tender_id' สามารถสังเกตได้ในชุดผลลัพธ์ที่ส่งคืนโดย MySQL ดังต่อไปนี้ -

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)

mysql> UPDATE tender1 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

ตอนนี้ แบบสอบถามด้านบนจะอัปเดตค่า 'อัตรา' ก่อนตามค่าเดิมของ 'tender_id' แล้วอัปเดตค่าของ 'tender_id' ซึ่งสามารถสังเกตได้ในชุดผลลัพธ์ที่ส่งคืนโดย MySQL ดังต่อไปนี้ -

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 จะสร้างความแตกต่างอย่างมากในผลลัพธ์