列Cが特定の値に等しい場合に重複を防ぐこのコードがあります
DELIMITER $$
CREATE TRIGGER special_unique_test BEFORE INSERT ON myTable
FOR EACH ROW BEGIN
IF NEW.C = 'x' AND EXISTS (
SELECT * FROM myTable WHERE A = NEW.A AND B = NEW.B AND C = 'x'
)THEN
UPDATE myTable SET D = D + 1 WHERE A = NEW.A AND B = NEW.B AND C = 'x';
END IF;
END$$
DELIMITER ;
updateステートメントが実行されないことを除いて、すべてが機能します。
追加した
PhpMyAdminでこれを試したところ、次のエラーが発生しました。
1442-このストアド関数/トリガーを呼び出したステートメントによって既に使用されているため、ストアド関数/トリガーのテーブル'myTable'を更新できません。
D列用に別のテーブルを作成することでこれを回避できますが、同じテーブルに配置すると便利です。
追加の質問:mysqliを使用してWebサイトから何かを挿入したときに、このエラーを表示するにはどうすればよいですか?