Computer >> Máy Tính >  >> Lập trình >> MySQL

Tầm quan trọng của thứ tự các Cột trong mệnh đề SET của câu lệnh CẬP NHẬT là gì? Nó sẽ tạo ra sự khác biệt lớn trong tập kết quả do MySQL trả về?

Thứ tự của các cột trong mệnh đề SET của câu lệnh UPDATE rất quan trọng vì MySQL cung cấp cho chúng ta giá trị cập nhật trên các tên cột được sử dụng trong một biểu thức. Có, nó sẽ tạo ra sự khác biệt lớn trong tập kết quả do MySQL trả về. Sau đây là một ví dụ để làm rõ hơn -

Ví dụ

Trong ví dụ này, chúng ta đang có một bảng "thầu". Đầu tiên, chúng tôi sẽ viết câu lệnh CẬP NHẬT bằng cách sử dụng 'thầu_id' làm cột đầu tiên và "tỷ lệ" làm cột thứ hai trong mệnh đề SET và sau đó chúng tôi sẽ viết câu lệnh CẬP NHẬT bằng cách sử dụng "tỷ lệ" làm cột đầu tiên và "thầu_id" làm cột thứ hai trên bảng 'thầu'.

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

Trước tiên, truy vấn ở trên sẽ cập nhật giá trị của ‘bid_id’ và sau đó cập nhật giá trị của ‘rate’ phù hợp với giá trị mới của ‘bid_id’. Nó có thể được quan sát trong tập kết quả được 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 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

Bây giờ, truy vấn ở trên sẽ cập nhật trước tiên giá trị của 'rate' theo giá trị cũ của 'thầu_id' và sau đó cập nhật giá trị của 'thầu_id' Nó có thể được quan sát trong tập kết quả do MySQL trả về như sau -

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)

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