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

Cách triển khai chỉ mục duy nhất hai chiều trên nhiều cột

Trong mysql, cách duy nhất tôi có thể nghĩ đến là thêm một vài cột tiện ích như

CREATE TABLE tbl_challenger (
  host int,
  challenger int,
  u0 int, u1 int
);

và thêm một vài trình kích hoạt đặt u0u1 ít nhất và lớn nhất trong số hai:

CREATE TRIGGER uinsert BEFORE INSERT ON tbl_challenger
 FOR EACH ROW SET NEW.u0 = LEAST(NEW.host,NEW.challenger),
  NEW.u1 = GREATEST(NEW.host,NEW.challenger);
CREATE TRIGGER uupdate BEFORE UPDATE ON tbl_challenger
 FOR EACH ROW SET NEW.u0 = LEAST(NEW.host,NEW.challenger),
  NEW.u1 = GREATEST(NEW.host,NEW.challenger);

sau đó bạn thêm một chỉ mục duy nhất trên (u0,u1)

CREATE UNIQUE INDEX uniqueness ON tbl_challenger(u0,u1);

Và bây giờ bạn sẽ gặp lỗi khi cố gắng chèn cặp trùng lặp bất kể thứ tự.

Trên một RDBMS tốt như PostgreSQL bạn sẽ có thể sử dụng chỉ mục trên biểu thức:

CREATE UNIQUE INDEX uniqueness ON tbl_challenger
    ( LEAST(host,challenger), GREATEST( host,challenger) );

Vì vậy, hãy chuyển đổi trước khi quá muộn;-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để chuyển đổi mssql script sang mysql

  2. SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo không thành công:tên nút hoặc tên dịch vụ được cung cấp hoặc không được biết

  3. UTF8 và các ký tự tiếng Nhật

  4. Làm thế nào bạn có thể hiển thị số 0 trong một hàng bằng cách sử dụng động năm và tháng trong một khoảng thời gian?

  5. làm cách nào để chèn các ký tự unicode vào mysql bằng câu lệnh chèn?