sql >> データベース >  >> RDS >> Mysql

複数の列に双方向の一意のインデックスを実装する方法

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

    だから、手遅れになる前に切り替えてください;-)



    1. 共有サーバーにあるMySQLデータベースにリモート接続する方法

    2. php + mysql+googleマップ

    3. SQL最後の2文字が一致する場合は、最後の2文字を置き換えます

    4. MySQLとJDBCを使用したプリペアドステートメントキャッシュ