我试图创建一个触发器来更新插入的另一个表中的行。最后一部分有效,但是如果没有带有该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] 删除。
我来说两句