sql >> Databasteknik >  >> RDS >> Mysql

Hur man implementerar ett dubbelriktat unikt index över flera kolumner

I mysql är det enda sättet jag kan tänka mig att lägga till ett par verktygskolumner som

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

och lägg till ett par triggers som ställer in u0 och u1 till den minsta och största av de två:

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

sedan lägger du till ett unikt index på (u0,u1)

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

Och nu får du ett felmeddelande när du försöker infoga dubblettpar oavsett beställning.

På ett anständigt RDBMS som PostgreSQL du skulle kunna använda index på uttryck:

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

Så byt innan det är för sent;-)



  1. MySQL hur fyller man i saknade datum inom intervallet?

  2. distinkt antal (*)

  3. Mysql-fråga för att hitta summan av fält med samma kolumnvärde

  4. Uppdatering av rader baserat på andra rader i samma tabell