Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да внедрите двупосочен уникален индекс в множество колони

В mysql единственият начин, за който се сещам, е да добавя няколко колони за помощни програми като

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

и добавете няколко тригера, които задават u0 и u1 до най-малкото и най-голямото от двете:

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);

след това добавяте уникален индекс към (u0,u1)

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

И сега ще получите грешка при опит за вмъкване на дублирана двойка, независимо от реда.

На прилична RDBMS като PostgreSQL ще можете да използвате индекс за израз:

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

Така че, превключете, преди да е станало твърде късно;-)



  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 резултатите в таблица без презареждане на страницата

  2. Превърнете резултата от базата данни в масив

  3. Как да преброим колоните на MySQL заявка, когато броят на върнатите колони е динамичен?

  4. Как да коригирам Illuminate\Database\QueryException:SQLSTATE[HY000] [1044] Достъпът е отказан за потребителя

  5. PHP/MySQL Вмъкване на нулеви стойности