UPDATE语句中SET子句中列的顺序的重要性是什么?在MySQL返回的结果集中,它是否会产生很大的差异?
在UPDATE语句的SET子句中,列的顺序很重要,因为MySQL会在表达式中使用的列名上提供更新后的值。是的,它会在MySQL返回的结果集中产生很大的差异。以下是一个示例,以便更清楚地理解它-
阅读更多:MySQL 教程
示例
在这个例子中,我们有一个名为”tender”的表格。首先,我们将使用”tender_id”作为第一个列,”rate”作为SET子句中的第二个列编写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子句中列的顺序,可以看出其在输出中产生的差异。
极客教程