mysqlで私が考えることができる唯一の方法は、
のようなユーティリティ列をいくつか追加することです。CREATE TABLE tbl_challenger (
host int,
challenger int,
u0 int, u1 int
);
u0
を設定するトリガーをいくつか追加します およびu1
2つのうち最小および最大:
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);
そして、順序に関係なく、重複するペアを挿入しようとするとエラーが発生します。
PostgreSQL
のようなまともなRDBMS 式にインデックスを使用できるようになります:
CREATE UNIQUE INDEX uniqueness ON tbl_challenger
( LEAST(host,challenger), GREATEST( host,challenger) );
だから、手遅れになる前に切り替えてください;-)