create trigger avoid_duplicated_sharing
before insert on sharingevents
for each row
begin
if (select count(*) from sharingevents where shared_note_id = NEW.shared_note_id AND shared_to = NEW.shared_to > 0) then
delete from sharingevents where shared_note_id = NEW.shared_note AND shared_to = NEW.shared_to
END IF;
END
しかしphpmyadminのは私に次のエラー与えのphpMyAdminを介してデータベースでこのクエリを実行しようとしています:
をMySQL said: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'END IF' at line 7
つの質問:
- スクリプトに何が問題なのですか?
BEFORE INSERT
トリガーの後に、INSERT
操作を実行しますか?いっそif (exists (select 1 from sharingevents where shared_note_id = new.shared_note_id AND shared_to = new.shared_to) > 0) then insert into sharingevents (shared_note_id,shared_to,permission_level) values (NEW.shared_note_id,NEW.shared_to,NEW.permission_level); end if;
または、
sharingevents(shared_note-id, shared_to)
に一意のインデックスを追加してから使用してください:ケースでは、私がINSERT INTO SharingEvents (SELECT * FROM NEW);
を、あなたは同じ、挿入にそれを回すいます。 – Barmar
あなたはそうです、私はクエリを以下のように変更しました: 'shared_note = NEW.shared_note_id AND shared_to = NEW.shared_to); ' – Maximetinu
' INSERT INTO ... ON DUPLICATE KEY UPDATE'またはINSERT IGNOREクエリ?あなたのユースケースに合っていませんか? – Mjh