Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

UPDATE 문의 SET 절에서 Column의 순서가 중요한 이유는 무엇입니까? MySQL이 반환하는 결과 집합에 큰 차이가 있습니까?

<시간/>

MySQL은 표현식에서 사용되는 열 이름에 대한 업데이트된 값을 제공하기 때문에 UPDATE 문의 SET 절에서 열의 순서는 중요합니다. 예, MySQL이 반환하는 결과 집합에 큰 차이를 만들 것입니다. 다음은 이를 명확히 하기 위한 예입니다 -

예시

이 예에서는 'tender' 테이블이 있습니다. 먼저 SET 절에서 'tender_id'를 첫 번째 열로 'rate'를 두 번째 열로 사용하여 UPDATE 문을 작성한 다음 '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 절의 열 순서를 변경하면 출력에 큰 차이가 생깁니다.