MySQL에서 =와 :=는 모두 값을 할당하는 대입(assignment) 연산자로 사용되지만, 두 연산자 사이에는 중요한 차이점이 존재합니다.
=와 := 연산자의 핵심 차이
= 연산자는 SET 문장이나 UPDATE 문장의 SET 절에서 사용될 때만 값 할당 연산자로 동작합니다. 그 외의 모든 경우에는 비교(comparison) 연산자로 해석됩니다.
반면 := 연산자는 오직 값 할당만을 수행하며, 어떤 경우에도 비교 연산자로 해석되지 않습니다.
UPDATE 문에서의 사용 예시
다음 두 쿼리에서는 테이블의 값을 갱신할 때 = 연산자와 := 연산자를 각각 사용했습니다.
mysql> Update estimated_cost1 SET Tender_value = '8570.000' where id = 2; Query OK, 1 row affected (0.06 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> Update estimated_cost1 SET Tender_value := '8575.000' where id = 2; Query OK, 1 row affected (0.06 sec) Rows matched: 1 Changed: 1 Warnings: 0
UPDATE 문장의 SET 절 안에서는 두 연산자 모두 정상적으로 값 할당이 이루어지는 것을 확인할 수 있습니다.
사용자 변수에 값 할당하기
아래 두 쿼리에서는 사용자 변수(user variable)에 값을 저장할 때 =와 :=를 각각 사용했습니다.
mysql> Set @A = 100; Query OK, 0 rows affected (0.01 sec) mysql> Select @A; +------+ | @A | +------+ | 100 | +------+ 1 row in set (0.00 sec) mysql> Set @B := 100; Query OK, 0 rows affected (0.00 sec) mysql> Select @B; +------+ | @B | +------+ | 100 | +------+ 1 row in set (0.00 sec)
SET 문장 내에서는 두 연산자가 동일한 기능과 용도로 작동하는 것을 볼 수 있습니다.
=가 비교 연산자로 동작하는 경우
하지만 아래 쿼리처럼 SELECT 문에서 =를 사용하면 비교 연산자로 해석됩니다. 결과값이 'TRUE'(1)인 것은 두 사용자 변수 @A와 @B가 같은 값을 가지고 있기 때문입니다.
mysql> Select @A = @B; +---------+ | @A = @B | +---------+ | 1 | +---------+ 1 row in set (0.00 sec)
정리
- =: SET 문장 또는 UPDATE 문의 SET 절에서는 대입 연산자, 그 외의 경우에는 비교 연산자로 동작합니다.
- :=: 항상 대입 연산자로만 동작하며, 절대 비교 연산자로 해석되지 않습니다.
따라서 SELECT 문 등에서 변수에 값을 할당해야 하는 상황이라면 혼동을 피하기 위해 :=를 사용하는 것이 안전합니다.