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