UPDATE 语句的 SET 子句中列的顺序有什么重要性?它会对 MySQL 返回的结果集产生很大影响吗?
mysqlmysqli database
UPDATE 语句的 SET 子句中列的顺序很重要,因为 MySQL 为我们提供表达式中使用的列名的更新值。是的,它会对 MySQL 返回的结果集产生很大影响。以下是一个例子来清楚地说明 −
示例
在此示例中,我们有一个表 ‘tender’。首先,我们将使用 SET 子句中的 ‘tender_id’ 作为第一列并使用 ‘rate’ 作为第二列来编写 UPDATE 语句,然后我们将使用表 ‘tender’ 上的 ‘rate’ 作为第一列并使用 ‘tender_id’ 作为第二列来编写 UPDATE 语句。
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 子句中列顺序的改变将会对输出产生很大的影响。