MySQL hỗ trợ kiểu SET cho phép lưu nhiều giá trị trong một cột, phân cách bằng dấu phẩy. Để xóa một giá trị, dùng toán tử bitwise.
Tạo bảng kiểu SET
mysql> CREATE TABLE DemoTable836(FirstName SET('John','Chris','Adam'));
Query OK, 0 rows affected (0.60 sec)
Chèn dữ liệu
mysql> INSERT INTO DemoTable836 VALUES('John,Chris');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable836 VALUES('John,Chris,Adam');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable836 VALUES('Chris,Adam');
Query OK, 1 row affected (0.25 sec)
mysql> INSERT INTO DemoTable836 VALUES('John,Adam');
Query OK, 1 row affected (0.37 sec)
Xóa giá trị 'Chris' khỏi cột
mysql> UPDATE DemoTable836
SET FirstName = FirstName & ~ (1 << FIND_IN_SET('Chris', FirstName) - 1);
Query OK, 3 rows affected (0.21 sec)
Kết quả sau cập nhật:
+-----------+ | FirstName | +-----------+ | John | | John,Adam | | Adam | | John,Adam | +-----------+ 4 rows in set (0.00 sec)
Giải thích: FIND_IN_SET trả về vị trí (1-based), trừ 1 để lấy bit mask, sau đó dùng ~ (NOT bitwise) và & (AND bitwise) để xóa bit tương ứng.