Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Ý nghĩa của "set+0" trong câu lệnh MySQL?

Hiểu về biểu thức SET + 0 trong MySQL

Khi cộng một tập hợp (SET) với 0 (set_col + 0), MySQL chuyển đổi giá trị SET thành số nguyên đại diện cho bitmask của các thành viên được chọn.

Cơ chế hoạt động

Kiểu SET lưu trữ dưới dạng bitmask. Mỗi thành viên tương ứng một bit (2^vị_trí).

Ví dụ minh họa

Tạo bảng có cột SET 5 thành viên:

mysql> CREATE TABLE SetZeroDemo (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> TechnicalSkills SET('C','Spring Framework/Hibernate','Python','Django Framework','Core Java') NOT NULL
    -> );

Chèn dữ liệu chọn tất cả 5 kỹ năng:

mysql> INSERT INTO SetZeroDemo(TechnicalSkills) 
VALUES ('C,Spring Framework/Hibernate,Python,Django Framework,Core Java');

Dữ liệu:

+----+-----------------------------------------------------------------+
| Id | TechnicalSkills                                                 |
+----+-----------------------------------------------------------------+
| 1  | C,Spring Framework/Hibernate,Python,Django Framework,Core Java  |
+----+-----------------------------------------------------------------+

Áp dụng + 0:

mysql> SELECT TechnicalSkills + 0 FROM SetZeroDemo;

Kết quả:

+-------------------+
| TechnicalSkills+0 |
+-------------------+
| 31                |
+-------------------+

Tính toán bitmask

5 thành viên → vị trí 0 đến 4:

= 2^0 + 2^1 + 2^2 + 2^3 + 2^4
= 1   + 2   + 4   + 8   + 16
= 31
Thành viênVị tríGiá trị bit (2^n)
C01
Spring Framework/Hibernate12
Python24
Django Framework38
Core Java416

Ứng dụng

  • Kiểm tra thành viên: (set_col + 0) & 4 > 0 → có Python không?
  • Đếm số thành viên: BIT_COUNT(set_col + 0)
  • So sánh SET: (set1 + 0) = (set2 + 0)
  • Lưu trữ compact: SET tối đa 64 thành viên → fit trong BIGINT

Lưu ý

  • Thứ tự thành viên trong định nghĩa SET quyết định vị trí bit
  • Không thể thay đổi thứ tự sau khi tạo bảng (cần ALTER TABLE)
  • ENUM cũng hoạt động tương tự nhưng chỉ chọn 1 giá trị