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

NULL値を非個別として扱う一意の制約を定義するための回避策はありますか?

    CREATE INDEXに記載されているとおり 構文

    式(質問で指定されたものなど)にインデックスを定義することはできないため、MySQLのUNIQUE インデックスは、必要に応じて制約を適用できません。

    代わりに、BEFORE INSERTを作成できます トリガー 一致するレコードがすでに存在する場合はエラーが発生します:

    DELIMITER ;;
    
    CREATE TRIGGER uniq1 BEFORE INSERT ON my_table FOR EACH ROW
      IF EXISTS(
        SELECT *
        FROM   my_table
        WHERE  column1 <=> NEW.column1 AND column2 <=> NEW.column2
        LIMIT  1
      ) THEN
        SIGNAL
          SQLSTATE '23000'
          SET MESSAGE_TEXT = 'Duplicate entry for key uniq1';
      END IF;;
    

    UPDATEを防ぐため 同様の問題を引き起こすことから、おそらく同様のBEFORE UPDATEを作成することをお勧めします。 トリガーも。




    1. PostgreSQL接続プール:パート2 – PgBouncer

    2. phpを使用してmysqlデータベーステーブルの内容をPDFファイルにエクスポートします

    3. MySQLユーザーのクエリの監視

    4. MySQLでのTO_BASE64()関数のしくみ