「しかし、現在、それは即座に削除されるため、何も挿入できません。」
実際、INSERT を実行すると、トリガーの実行で例外がスローされるはずです。
Error Code: 1442
Can't update table 'test' in stored function/trigger because it is
already used by statement which invoked this stored function/trigger.
(新しいバージョンの MySQL で何かが根本的に異なる場合を除きます。)
実行したい操作 (つまり、挿入先と同じテーブルから行を削除すること) は、MySQL トリガーでは実行できません。
UNIQUE KEY と BEFORE INSERT トリガーを組み合わせて使用すると、複数の行が挿入されるのを防ぐことができます。BEFORE INSERT トリガーは、一意のキーを持つ列の値を静的な値に設定でき、INSERT ステートメントは重複キー (「重複エントリ」) 例外をスローします。
次に、INSERT ... ON DUPLICATE KEY UPDATE ...
ステートメントを使用して、一意の ID 以外の列の値を更新できます。
CREATE TRIGGER `test_insert` BEFORE INSERT ON test
FOR EACH ROW BEGIN
SET NEW.id := 1;
END
ALTER TABLE test ADD UNIQUE KEY (id);
INSERT INTO test (somecol) VALUES ('someval')
ON DUPLICATE KEY UPDATE somecol = VALUES(somecol) ;