gpt4 book ai didi

mysql - MariaDB sql触发器如果键存在则更新或如果不存在则插入?

转载 作者:行者123 更新时间:2023-11-29 20:57:39 25 4
gpt4 key购买 nike

我是 SQL 新手,但尝试构建一个在每次插入时执行的简单触发器。如果键已经存在,我希望它更新一些表值,或者如果键不存在,则插入一些新值。

下面是我尝试过的,但理想情况下我希望测试器成为正在插入的东西。像 NEW.reference_key 这样的东西?

CREATE TRIGGER key_access_monitor 
BEFORE INSERT ON individual_key_log
FOR EACH ROW
BEGIN
IF EXISTS (SELECT reference_key FROM individual_key_log WHERE key = 'tester')
SELECT 'Found it!'
ELSE
SELECT 'Cannot find it!'
END IF
END

最佳答案

如果具有相同键的行尚不存在,则您想要插入新行,如果存在则更新现有行,是否正确?

您可能会发现使用INSERT ... ON DUPLICATE KEY UPDATE更容易,如下所示:

INSERT INTO individual_key_log
(key, col1, col2, col3, ...)
VALUES
('tester', 'val1', 'val2', 'val3', ...)
ON DUPLICATE KEY UPDATE
SET col1 = 'val1', col2 = 'val2', col3 = 'val3', ...;

触发器方法的问题之一是尝试从同一个表上的行触发器内查询表是不好的做法,因为它违反了 ACID 原则;许多 DBMS 根本不允许这样做,从而引发“Mutating Table”错误。从插入行触发器中更新行会放大相同的问题。行触发器不应尝试直接访问其目标表,而应通过 OLDNEW 间接访问触发行强>.

希望有帮助。

关于mysql - MariaDB sql触发器如果键存在则更新或如果不存在则插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37504844/

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