MySQL에서 비트 연산(Bitwise Operations)은 데이터를 효율적으로 저장하고 조작할 수 있도록 해주는 강력한 기능 중 하나입니다. 특히 권한 관리, 상태 플래그, 다중 선택값 저장 등에 자주 사용됩니다. 이 튜토리얼에서는 MySQL에서 지원하는 비트 연산자와 활용 방법을 자세히 설명하겠습니다.
1️⃣ 비트 연산자 개요
MySQL에서 지원하는 주요 비트 연산자는 다음과 같습니다:
연산자 설명 예제
& | 비트 AND (둘 다 1일 때 1 반환) | 5 & 3 → 1 |
` | ` | 비트 OR (둘 중 하나가 1이면 1 반환) |
^ | 비트 XOR (둘이 다를 때 1 반환) | 5 ^ 3 → 6 |
~ | 비트 NOT (비트를 반전) | ~5 → -6 |
<< | 비트 왼쪽 시프트 (n비트 왼쪽 이동) | 5 << 1 → 10 |
>> | 비트 오른쪽 시프트 (n비트 오른쪽 이동) | 5 >> 1 → 2 |
MySQL에서 비트 연산은 정수(Integer) 타입에 대해 적용됩니다.
2️⃣ 비트 연산자 상세 설명
1. 비트 AND (&)
비트 AND 연산자는 둘 다 1일 때 1을 반환합니다.
SELECT 5 & 3;
💡 계산 과정:
5 → 101
3 → 011
결과 → 001 (1)
2. 비트 OR (|)
비트 OR 연산자는 하나라도 1이면 1을 반환합니다.
SELECT 5 | 3;
💡 계산 과정:
5 → 101
3 → 011
결과 → 111 (7)
3. 비트 XOR (^)
비트 XOR 연산자는 둘이 다를 때 1을 반환합니다.
SELECT 5 ^ 3;
💡 계산 과정:
5 → 101
3 → 011
결과 → 110 (6)
4. 비트 NOT (~)
비트 NOT 연산자는 **비트를 반전(1을 0으로, 0을 1로 변경)**합니다.
SELECT ~5;
💡 결과:
~5 → -6 (2의 보수 표현 사용)
5. 비트 왼쪽 시프트 (<<)
비트 왼쪽 시프트 연산자는 n비트만큼 왼쪽으로 이동하며, 오른쪽에 0을 채움
SELECT 5 << 1;
💡 계산 과정:
5 → 101
왼쪽 시프트(1비트) → 1010 (10)
6. 비트 오른쪽 시프트 (>>)
비트 오른쪽 시프트 연산자는 n비트만큼 오른쪽으로 이동하며, 왼쪽의 비트는 버려짐
SELECT 5 >> 1;
💡 계산 과정:
5 → 101
오른쪽 시프트(1비트) → 10 (2)
3️⃣ 비트 연산 활용 예제
📌 1. 사용자의 권한 관리 (Bitwise Permissions)
사용자의 권한을 비트 플래그로 저장하면 효율적인 관리가 가능합니다.
권한 값 정의
권한 비트 값 10진수 값
읽기(Read) | 0001 | 1 |
쓰기(Write) | 0010 | 2 |
실행(Execute) | 0100 | 4 |
삭제(Delete) | 1000 | 8 |
사용자 테이블 (User Permissions)
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
permissions INT -- 비트 플래그 저장
);
INSERT INTO users (id, name, permissions) VALUES (1, 'Alice', 5); -- Read(1) + Execute(4) = 5
INSERT INTO users (id, name, permissions) VALUES (2, 'Bob', 3); -- Read(1) + Write(2) = 3
특정 권한을 가진 사용자 찾기
✔ Execute(4) 권한이 있는 사용자 조회
SELECT * FROM users WHERE (permissions & 4) = 4;
✔ Write(2) 권한이 없는 사용자 조회
SELECT * FROM users WHERE (permissions & 2) = 0;
📌 2. 상태 플래그 관리 (Bitwise Status Flags)
비트 연산을 사용하면 여러 상태를 하나의 컬럼에 저장할 수 있습니다.
상태 값 정의
상태 비트 값 10진수 값
활성(Active) | 0001 | 1 |
검토 중(Review) | 0010 | 2 |
승인됨(Approved) | 0100 | 4 |
거부됨(Rejected) | 1000 | 8 |
테이블 생성 및 데이터 입력
CREATE TABLE orders (
order_id INT PRIMARY KEY,
status INT -- 비트 플래그 저장
);
INSERT INTO orders (order_id, status) VALUES (1, 5); -- Active(1) + Approved(4) = 5
INSERT INTO orders (order_id, status) VALUES (2, 3); -- Active(1) + Review(2) = 3
특정 상태인 주문 조회
✔ Approved(4) 상태인 주문 조회
SELECT * FROM orders WHERE (status & 4) = 4;
✔ Review(2) 상태가 아닌 주문 조회
SELECT * FROM orders WHERE (status & 2) = 0;
🚀 결론
MySQL의 비트 연산자를 활용하면 데이터를 효율적으로 저장하고 조회할 수 있습니다. 특히 권한 관리, 상태 플래그, 다중 선택 값 저장과 같은 경우에 유용합니다.
✅ 요약
✔ 비트 연산은 정수 데이터에만 적용 가능 ✔ 비트 연산으로 권한 및 상태를 저장하면 효율적인 관리 가능 ✔ WHERE 절에서 비트 연산을 사용하면 특정 조건을 빠르게 검색 가능
비트 연산을 활용하면 데이터베이스 설계를 최적화할 수 있으니, 꼭 활용해 보세요! 🚀
'테크 > MySQL' 카테고리의 다른 글
기본 SQL 문법 튜토리얼 (0) | 2025.01.25 |
---|