sql >> Databáze >  >> RDS >> Mysql

Jak implementovat obousměrný jedinečný index ve více sloupcích

V mysql mě napadá jediný způsob, jak přidat několik sloupců nástrojů jako

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

a přidejte několik spouštěčů, které nastavují u0 a u1 na nejmenší a největší z těchto dvou:

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

pak přidáte jedinečný index na (u0,u1)

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

A nyní se při pokusu o vložení duplicitního páru bez ohledu na pořadí zobrazí chyba.

Na slušném RDBMS jako PostgreSQL budete moci použít index na výraz:

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

Takže přepněte, než bude příliš pozdě;-)



  1. Funkce JSON_ARRAYAGG() v Oracle

  2. dbms_output size buffer overflow

  3. Jak říct node.js, že mysql neběží na výchozím portu?

  4. Jak v Django najít termín, který je součástí řetězce namísto toho, aby obsahoval tento řetězec?