在 UPDATE 語句的 SET 子句中,列的順序重要嗎?它會對 MySQL 返回的結果集產生很大的影響嗎?


UPDATE 語句的 SET 子句中列的順序很重要,因為 MySQL 會根據表示式中使用的列名提供更新後的值。是的,它會對 MySQL 返回的結果集產生很大的影響。以下是一個示例,以便更好地理解:-

示例

在這個例子中,我們有一個名為“tender”的表。首先,我們將使用“tender_id”作為 SET 子句中的第一個列,“rate”作為第二個列來編寫 UPDATE 語句,然後我們將使用“rate”作為第一個列,“tender_id”作為第二個列來編寫 UPDATE 語句,作用於“tender”表。

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”的值,然後根據“tender_id”的新值更新“rate”的值。這可以在 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”的舊值更新“rate”的值,然後更新“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 子句中列順序的改變就會對輸出產生很大的影響。

更新於: 2020年6月20日

212 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告