sql >> Database teknologi >  >> RDS >> Mysql

Sådan implementeres et tovejs unikt indeks på tværs af flere kolonner

I mysql er den eneste måde, jeg kan komme i tanke om, at tilføje et par hjælpekolonner som

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

og tilføj et par triggere, der indstiller u0 og u1 til den mindste og største af de to:

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

så tilføjer du et unikt indeks på (u0,u1)

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

Og nu får du en fejl, når du prøver at indsætte duplikatpar uanset rækkefølgen.

På en anstændig RDBMS som PostgreSQL du ville være i stand til at bruge indeks på udtryk:

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

Så skift, før det er for sent;-)



  1. Sådan overføres boolesk parameter til Oracle-procedure C#

  2. Hvad er den bedste feltdefinition til at gemme en .NET-decimal i MySQL?

  3. Tilslutning af en 64-bit applikation til Clarion TopSpeed

  4. Regex-forespørgsel i Hibernate