在 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 子句中列順序的改變就會對輸出產生很大的影響。
廣告