Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách giải quyết trong mysql cho Chỉ mục một phần hoặc Chỉ mục được lọc?

Các chỉ mục đã lọc có thể được mô phỏng bằng các chỉ mục hàm và CASE biểu thức (MySQL 8.0.13 và mới hơn):

CREATE TABLE t(id INT PRIMARY KEY, myColumn VARCHAR(100));

-- NULL are not taken into account with `UNIQUE` indexes   
CREATE UNIQUE INDEX myIndex ON t((CASE WHEN myColumn <> 'myText' THEN myColumn END));


-- inserting excluded value twice
INSERT INTO t(id, myColumn) VALUES(1, 'myText'), (2, 'myText');

-- trying to insert different value than excluded twice
INSERT INTO t(id, myColumn) VALUES(3, 'aaaaa');

INSERT INTO t(id, myColumn) VALUES(4, 'aaaaa');
-- Duplicate entry 'aaaaa' for key 'myIndex'

SELECT * FROM t;

db <> fiddle demo

Đầu ra:

+-----+----------+
| id  | myColumn |
+-----+----------+
|  1  | myText   |
|  2  | myText   |
|  3  | aaaaa    |
+-----+----------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL chỉ nhận được ROLLUP tổng thể

  2. Phím nước ngoài - Họ làm gì cho tôi?

  3. Tạo sơ đồ cơ sở dữ liệu trong MySQL Workbench

  4. Chọn các hàng MYSQL có cùng tên trường và thêm tiền tố

  5. Chuyển đổi ngày giờ JS thành ngày giờ MySQL