在 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 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告