gpt4 book ai didi

mysql - 如何在 MySQL 5.5 中设置仅检查插入行的 sql 触发器

转载 作者:行者123 更新时间:2023-11-29 15:23:50 24 4
gpt4 key购买 nike

我正在尝试在 MySQL 5.5 中创建一个触发器,其中 CHECK 约束不可用。我的目标是不允许在 customerId 小于或等于零的情况下插入行。

我的问题是该行:

ON PlatformAccount FOR EACH ROW

如果我错了,请纠正我,将查看表中的所有行。这是我不想要的性能打击。

如何设置此触发器以仅验证插入的行是否遵循此约束?

DELIMITER $$

CREATE TRIGGER platform_account_trigger
BEFORE INSERT
ON PlatformAccount FOR EACH ROW
BEGIN
IF new.customerId <= 0 THEN
SIGNAL SQLSTATE VALUE '99999'
SET MESSAGE_TEXT = 'You cannot insert a row without a customerId greater than zero';
END IF;
END;

最佳答案

你需要纠正。这部分:

对于每一行

表示触发器将为每个受影响的行触发一次;仅插入或更新的行。

这并不意味着触发器会针对表中存在的每一行触发。 (我们可以创建一个 BEFORE UPDATE 触发器,然后运行一个 UPDATE 语句来更改表中的每行;然后将为表中的每行触发该触发器;但这只是因为每更新一行都会触发触发器。

<小时/>

除 MySQL 之外的某些数据库(例如 Oracle)支持语句级触发器,每个语句执行时触发一次,而不是针对每个受影响的行触发一次。这些语句级触发器是通过省略 FOR EACH ROW 位来定义的。 MySQL 目前不支持语句级触发器; MySQL 中的触发器是行级触发器,为每个受影响的行触发。

关于mysql - 如何在 MySQL 5.5 中设置仅检查插入行的 sql 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59181021/

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