Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 =와 := 대입 연산자의 차이점은 무엇일까?

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 문 등에서 변수에 값을 할당해야 하는 상황이라면 혼동을 피하기 위해 :=를 사용하는 것이 안전합니다.