SQL触发器:如果行不存在,则创建行

尼克拉斯·曼德鲁普·弗雷德里克森

我试图创建一个触发器来更新插入的另一个表中的行。最后一部分有效,但是如果没有带有该ID的行,我想在添加该ID之前为其创建一行。

但是我收到了#1064错误:“如果不存在,则每个行都将出现resource_xpEvents(从resource_xp中选择1个)”

DELIMITER $$
CREATE TRIGGER test AFTER INSERT resource_xpEvents FOR EACH ROW
BEGIN
IF NOT EXISTS (SELECT 1 FROM resource_xp WHERE userId = NEW.userId) THEN
    INSERT INTO resource_xp (userId)
    VALUES (NEW.userId);
END IF;

UPDATE resource_xp
    SET xp = xp + new.delta
    WHERE userId = new.userId

END $$
DELIMITER ;
鞭子驱动

试试这个:

DELIMITER $$
CREATE TRIGGER test AFTER INSERT ON resource_xpEvents FOR EACH ROW
BEGIN
IF NOT EXISTS (SELECT 1 FROM resource_xp WHERE userId = NEW.userId) THEN
    INSERT INTO resource_xp (userId)
    VALUES (NEW.userId);
END IF;

UPDATE resource_xp
    SET xp = xp + new.delta
    WHERE userId = new.userId;

END $$
DELIMITER ;

如果您想尝试:

DELIMITER $$
CREATE TRIGGER test AFTER INSERT ON resource_xpEvents FOR EACH ROW
BEGIN

    REPLACE INTO resource_xp (userId,xp) values (NEW.userId,xp+new.delta);

END $$
DELIMITER ;

更具可读性,但性能较差。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL触发器,如果不存在则添加一个新字符串

当行不存在时更新触发器

MYSQL,如果值对不存在则创建行

在 PostgreSQL 中创建触发器会出现“函数不存在”错误

创建或更改触发器(如果存在)

删除触发器(如果存在)并创建

PostgreSQL 更新触发器:关系“新”不存在

SQL Server触发器:INSERTED和DELETED不存在。它是什么?

SQL插入如果行不存在

如果存在则更新 SQL 行,如果不存在则创建(在 PHP 中)

Oracle 触发器创建时出现编译错误,ORA-02289:序列不存在

模式构建器:如果不存在则创建表

GTM - 如果 cookie 不存在则触发

SQL Server-创建临时表(如果不存在)

SQL Server - 如果列不存在则创建列

触发器函数错误:错误:列不存在

尝试从触发器插入表时,获取表不存在错误

Postgres触发器和生产者(关系的“新”列不存在)

插入触发器上不存在Postgres错误关系“ new”

更新触发器之前不存在新的PostgreSQL 10错误关系

如何在不存在的用户上获取 AWS Pre 身份验证触发器

Oracle触发器错误“ ORA-00942:表或视图不存在”

我收到错误变量 Accnew 并且 ACCold 在顶点触发器中不存在

Oracle触发器:如果数据库B中不存在该值,则在数据库A中的表中显示错误

如果不存在关系,则 SQL 删除行

SQL创建触发器

用于检查行是否已存在的 SQL 触发器

如果存在则仅更改触发器

更新触发器,导致SQL错误“找不到对象“ XXX”,因为它不存在或您没有权限”。