Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tầm quan trọng của thứ tự cột trong mệnh đề SET của UPDATE? Có tạo ra sự khác biệt lớn?

Thứ tự cột trong mệnh đề SET của câu lệnh UPDATE là quan trọng vì MySQL cung cấp giá trị đã cập nhật cho các tên cột được dùng trong biểu thức. Có, nó sẽ tạo ra sự khác biệt lớn trong tập kết quả trả về bởi MySQL. Ví dụ sau làm rõ:

Ví dụ

Trong ví dụ này, chúng ta có bảng 'tender'. Trước, chúng ta viết câu lệnh UPDATE dùng 'tender_id' làm cột đầu và 'rate' làm cột thứ hai trong SET, sau đó viết UPDATE dùng 'rate' làm cột đầu và 'tender_id' làm cột thứ hai trên bảng '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

Truy vấn trên sẽ cập nhật trước giá trị 'tender_id' rồi cập nhật 'rate' dựa trên giá trị mới của 'tender_id'. Có thể quan sát trong tập kết quả trả về bởi MySQL như sau:

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 tender 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

Bây giờ, truy vấn trên sẽ cập nhật trước giá trị 'rate' dựa trên giá trị cũ của 'tender_id', rồi cập nhật 'tender_id'. Có thể quan sát trong tập kết quả:

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)

Cách này, việc thay đổi thứ tự cột trong mệnh đề SET sẽ tạo ra sự khác biệt lớn trong đầu ra.