【发布时间】:2018-02-22 17:06:40
【问题描述】:
我正在尝试通过 phpmyadmin
在数据库中执行此查询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 给了我以下错误:
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操作吗?如果不是,我将不得不删除INSERT INTO SharingEvents (SELECT * FROM NEW);
【问题讨论】:
-
你不是把插入变成更新,而是把它变成同一个插入。
-
你说得对,我把查询改成:
delete from sharingevents where (shared_note = NEW.shared_note_id AND shared_to = NEW.shared_to); -
INSERT INTO ... ON DUPLICATE KEY UPDATE或INSERT IGNORE查询有什么问题?它们不适合您的用例吗? -
@Mjh 正如我所说我不能修改应用程序,所以我不能让它执行与 INSERT INTO 不同的查询
-
这整个方法注定要失败,因为不允许触发器修改触发它们的同一个表。
标签: mysql sql triggers phpmyadmin sql-insert