gpt4 book ai didi

MySQL BEFORE INSERT 触发器将重复的主键插入转换为更新

转载 作者:行者123 更新时间:2023-11-29 18:25:49 26 4
gpt4 key购买 nike

我正在尝试通过 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 说:#1064 - 你的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解在第 7 行“END IF”附近使用的正确语法

两个问题:

  • 我的脚本出了什么问题?
  • BEFORE INSERT 触发后,是否会执行 INSERT 操作?如果没有,我将不得不删除 INSERT INTOSharingEvents (SELECT * FROM NEW);

最佳答案

我用以下代码解决了这个问题:

delimiter $$

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_id AND shared_to = NEW.shared_to;
end if;
END$$

问题出在分隔符上。

即便如此,我的触发器还是不起作用。当应用程序插入重复的主键时,MySQL 会抛出以下错误:

#1442 - 无法更新存储函数/触发器中的表“sharingevents”,因为它已被调用此存储函数/触发器的语句使用。

关于MySQL BEFORE INSERT 触发器将重复的主键插入转换为更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46206822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com