在清理中这个答案我学到了一些关于TRIGGER
MySQL 中的 s 和存储过程,但令人惊讶的是,虽然BEFORE INSERT
and BEFORE UPDATE
触发器可以修改数据,它们似乎不会导致插入/更新失败(即验证)。在这种特殊情况下,我能够通过以导致主键重复的方式操作数据来使其工作,这在这种特殊情况下是有意义的,但在一般意义上不一定有意义。
MySQL 中可以实现这种功能吗?在任何其他 RDBMS 中(遗憾的是我的经验仅限于 MySQL)?也许是一个THROW EXCEPTION
样式语法?
由此博客文章
MySQL 触发器:如何中止 INSERT、UPDATE 或 DELETE
扳机?在 EfNet 的 #mysql 上有人
问:
如果我的业务规则失败,如何使触发器中止操作?
在 MySQL 5.0 和 5.1 中,您需要
采取一些诡计来制造
触发失败并提供有意义的
错误信息。 MySQL 存储
程序常见问题解答说明了有关错误的信息
处理:
SP 11. SP 是否有“提出申请错误”的“提出”声明?抱歉,目前没有。 SQL 标准 SIGNAL 和 RESIGNAL 语句位于 TODO 上。
也许 MySQL 5.2 将包含 SIGNAL
声明这将使这个黑客
直接从 MySQL 存储中窃取
程序编程已过时。什么
是黑客吗?你要强行
MySQL 尝试使用一个列
不存在。丑陋的?是的。可以
工作?当然。
CREATE TRIGGER mytabletriggerexample
BEFORE INSERT
FOR EACH ROW BEGIN
IF(NEW.important_value) < (fancy * dancy * calculation) THEN
DECLARE dummy INT;
SELECT Your meaningful error message goes here INTO dummy
FROM mytable
WHERE mytable.id=new.id
END IF; END;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)