Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Solusi di mysql untuk Indeks parsial atau Indeks yang difilter?

Indeks yang difilter dapat ditiru dengan indeks fungsi dan CASE ekspresi (MySQL 8.0.13 dan yang lebih baru):

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<>demo biola

Keluaran:

+-----+----------+
| 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. Terhubung ke MySQL dengan JDBC melalui jaringan

  2. MySQL INT artinya

  3. Zend Framework dan Mysql - sangat lambat

  4. Cara menentukan versi MySQL

  5. ADDDATE() vs DATE_ADD() di MySQL:Apa Bedanya?