式(質問で指定されたものなど)にインデックスを定義することはできないため、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
を作成することをお勧めします。 トリガーも。