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 절의 열 순서를 변경하면 출력에 큰 차이가 생깁니다.