SET là kiểu dữ liệu của đối tượng Chuỗi có thể chứa 0 hoặc nhiều hơn hoặc bất kỳ số lượng giá trị chuỗi nào. Chúng phải được chọn từ danh sách các giá trị được xác định trước được chỉ định trong quá trình tạo bảng. Đây là một trong những kiểu dữ liệu hiếm khi được sử dụng trong cơ sở dữ liệu MySQL. Nó được gọi là một loại phức tạp vì việc triển khai nó làm tăng độ phức tạp
Các kiểu dữ liệu SET và ENUM hoạt động theo cách tương tự vì MySQL sử dụng nó với một danh sách các giá trị được xác định trước. Nhưng có một điều làm cho nó khác biệt là kiểu dữ liệu ENUM chỉ có thể chứa một thành viên duy nhất trong danh sách giá trị được xác định trước, trong khi kiểu dữ liệu SET cho phép chúng ta lưu trữ 0 hoặc bất kỳ số lượng giá trị nào cùng nhau
Nếu chúng ta xác định các giá trị cột SET với nhiều phần tử tập hợp, thì bắt buộc phải phân tách nó bằng toán tử dấu phẩy [,]. Ví dụ: chúng tôi đã xác định một cột là
Sau đó, cột của chúng tôi có thể có bất kỳ giá trị nào sau đây
Lưu trữ kiểu dữ liệu SET
Kiểu dữ liệu SET có thể lưu trữ tối đa 64 phần tử riêng biệt trong cột của nó. Nếu cột SET chứa các giá trị trùng lặp, nó sẽ báo lỗi khi bật chế độ SQL nghiêm ngặt
Khi chúng ta tạo một bảng và nếu các giá trị thành viên SET trong định nghĩa bảng có khoảng trắng, thì chúng sẽ tự động bị xóa khỏi định nghĩa bảng sau khi thực hiện câu lệnh CREATE
Kiểu dữ liệu SET được lưu trữ dưới dạng giá trị số trong các bảng MySQL. Nó chiếm từ một đến tám [i. e. , 1, 2, 3, 4, 8] byte, tùy thuộc vào số phần tử chứa trong cột SET. Bảng sau giải thích yêu cầu lưu trữ đối với kiểu dữ liệu SET trong MySQL
Trong MySQL, phần tử SET được lưu trữ trong bitmap nơi mỗi thành viên được biểu thị bằng một giá trị bit. Chúng ta hãy xem bảng sau minh họa rõ hơn
Trong định nghĩa trên, mỗi thành viên của tập hợp được gán một bit có các giá trị thập phân và nhị phân sau
SET ElementGiá trị thập phânGiá trị nhị phânJava10001Python20010Android40100PHP81000Bây giờ, nếu chúng ta gán giá trị 9 cho cột này, theo hệ nhị phân, nó sẽ là 1001. Vì vậy, nó chọn phần tử SET đầu tiên và thứ tư, và giá trị kết quả là ''Java, PHP'', sẽ là phần tử thứ năm của cột SET
Đôi khi, cột kiểu dữ liệu SET của chúng tôi có nhiều hơn một phần tử; . Nó có nghĩa là phần tử có thể theo bất kỳ thứ tự nào. MySQL cũng cho phép chúng ta chèn nhiều lần cùng một phần tử vào cột kiểu dữ liệu SET. Khi chúng tôi lấy giá trị, nó sẽ trả về từng phần tử một lần dựa trên thứ tự mà chúng được liệt kê trong thời gian tạo bảng
Hãy để chúng tôi hiểu nó với sự trợ giúp của ví dụ sau, nơi chúng tôi sẽ tạo một bảng có tên "myset_test" có chứa một cột SET['Java', 'Python', 'Android', 'PHP']
Tiếp theo, chúng ta cần chèn các giá trị vào bảng
Bây giờ, khi chúng tôi lấy giá trị từ bảng, chúng tôi sẽ nhận được tất cả các giá trị này xuất hiện dưới dạng "Java, PHP", vì vậy hãy thực hiện câu lệnh bên dưới để thấy điều này
Ở đầu ra, chúng ta có thể thấy rằng cột SET của chúng ta chỉ có các giá trị [Java, PHP]
Cách cập nhật dữ liệu SET
Kiểu dữ liệu MySQL SET có thể cập nhật dữ liệu theo ba cách, được đưa ra dưới đây
1. Bằng cách thay thế hoàn toàn dữ liệu SET
Nếu chúng ta muốn thay thế toàn bộ dữ liệu thành một SET, bắt buộc phải chỉ định các giá trị mới. Thực hiện các câu lệnh sau trong đó truy vấn đầu tiên cập nhật hàng = 4 với giá trị = 'Java, Python' và truy vấn thứ hai cập nhật hàng = 5 với giá trị = 11. Ở đây, 11 có nghĩa là 8+2+1=Java, Python và PHP
Sau khi thực hiện thành công, hãy thực hiện lệnh dưới đây để xác minh đầu ra
đầu ra
2. Bằng cách thêm các thành viên SET
Đôi khi, cần thêm phần tử vào cột SET hiện có, khi đó hàm CONCAT[] hoặc CONCAT_WS[] cho phép chúng ta chèn phần tử mới vào danh sách được phân tách bằng dấu phẩy. Thực hiện tuyên bố này để hiểu nó rõ ràng hơn
Sau khi thực hiện thành công, hãy thực hiện lệnh dưới đây để xác minh đầu ra
đầu ra
3. Bằng cách loại bỏ các thành viên SET
Nếu bạn muốn xóa bất kỳ phần tử nào khỏi SET hiện có, thì có thể sử dụng hàm REPLACE[] để xóa cột SET phần tử. Thực hiện tuyên bố này để hiểu nó rõ ràng hơn
Một lần nữa, nếu bạn sử dụng giá trị thập phân để xóa phần tử khỏi một tập hợp hiện có, hãy sử dụng toán tử AND[&] theo bit và toán tử NOT[~] theo bit. Thực hiện câu lệnh dưới đây
Sau khi thực hiện thành công, hãy thực hiện lệnh dưới đây để xác minh đầu ra
đầu ra
Nếu chúng ta muốn xem các giá trị số nguyên tương ứng với thành viên SET, thì chúng ta cần thêm "+0" vào tên cột. Chúng ta hãy xem ví dụ sau
Khi chúng ta thực hiện câu lệnh trên, kết quả sau xuất hiện trong đó bao gồm các giá trị số nguyên tương ứng với phần tử SET
Nhược điểm của việc sử dụng kiểu dữ liệu SET
Kiểu dữ liệu SET không khuyến nghị chúng tôi sử dụng nó trong cơ sở dữ liệu của chúng tôi vì những nhược điểm sau