MySQL에서 INT 타입 컬럼의 값을 토글(0 ↔ 1 전환)하려면 UPDATE 문과 IF() 함수를 함께 사용하면 됩니다. 별도의 조건문이나 애플리케이션 로직 없이 단 한 줄의 쿼리로 처리할 수 있어 매우 유용합니다.
기본 문법
UPDATE yourTableName
SET yourColumnName = IF(yourColumnName = 0, 1, 0);
위 문법은 해당 컬럼의 값이 0이면 1로, 그 외의 값(1 포함)이면 0으로 변경합니다. 이제 실제 예제를 통해 동작 과정을 살펴보겠습니다.
1. 예제 테이블 생성
먼저 INT 값을 저장할 테이블을 생성합니다.
mysql> CREATE TABLE ToggleDemo
-> (
-> IsOnOrOff INT
-> );
Query OK, 0 rows affected (0.53 sec)
2. 샘플 데이터 삽입
INSERT 문을 사용해 0과 1 값을 번갈아 입력합니다.
mysql> INSERT INTO ToggleDemo VALUES(1);
Query OK, 1 row affected (0.25 sec)
mysql> INSERT INTO ToggleDemo VALUES(0);
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO ToggleDemo VALUES(1);
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO ToggleDemo VALUES(0);
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO ToggleDemo VALUES(1);
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO ToggleDemo VALUES(0);
Query OK, 1 row affected (0.09 sec)
3. 현재 데이터 확인
삽입된 전체 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM ToggleDemo;
실행 결과는 다음과 같습니다.
+-----------+
| IsOnOrOff |
+-----------+
| 1 |
| 0 |
| 1 |
| 0 |
| 1 |
| 0 |
+-----------+
6 rows in set (0.00 sec)
4. 토글 쿼리 실행
이제 앞서 소개한 문법을 적용해 모든 값을 반대 값으로 변경합니다.
mysql> UPDATE ToggleDemo SET IsOnOrOff = IF(IsOnOrOff = 0, 1, 0);
Query OK, 6 rows affected (0.12 sec)
Rows matched: 6 Changed: 6 Warnings: 0
5. 결과 검증
다시 데이터를 조회해 값이 정상적으로 토글되었는지 확인합니다.
mysql> SELECT * FROM ToggleDemo;
모든 값이 0 ↔ 1로 성공적으로 전환된 것을 확인할 수 있습니다.
+-----------+
| IsOnOrOff |
+-----------+
| 0 |
| 1 |
| 0 |
| 1 |
| 0 |
| 1 |
+-----------+
6 rows in set (0.00 sec)
추가 팁: 다른 토글 방식
IF() 함수 외에도 비트 연산자나 산술 연산을 활용한 방법도 있습니다.
- 비트 XOR 연산:
SET yourColumnName = yourColumnName ^ 1; - 산술 연산:
SET yourColumnName = 1 - yourColumnName;(컬럼에 0 또는 1만 있는 경우)
세 가지 방식 모두 결과는 동일하지만, IF() 함수를 사용하면 의도가 명확하게 드러나고 NULL 처리 등 확장도 용이하다는 장점이 있습니다.