mysql触发器可以用来阻止插入吗?

发布于 2024-10-17 06:34:36 字数 136 浏览 0 评论 0原文

我有一个邮件队列表和一个电子邮件黑名单表。在整个代码中,在无数(字面上,我数过)位置对邮件队列表进行了插入。我的任务是阻止向黑名单上的人发送电子邮件。如果地址位于黑名单表中,我可以在邮件队列表上创建拒绝插入的触发器吗?

有可能有更好的方法吗?

I've got a mail queue table, and a email black list table. Inserts to the mail queue table are made in a zillion (literally, I counted) places throughout the code. I've been tasked with blocking emails to people on the black list. Can I make a trigger on the mail queue table that rejects inserts if the address is in the black list table?

Is there possibly a better way of doing this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝礼 2024-10-24 06:34:36

来自书籍“高性能 MySQL 第二版”:

有时您甚至可以解决以下问题
FOR EACH ROW 限制。罗兰·布曼
发现ROW_COUNT()总是报告
1 触发器内部,除了
BEFORE 触发器的第一行。你可以
用它来阻止触发器的代码
对受影响的每一行执行
每个语句只运行一次。
它与 per-statement 不一样
触发器,但这是一个有用的技术
用于模拟 BEFORE 的每条语句
在某些情况下触发。这种行为
实际上可能是一个错误
在某个时刻固定,所以你应该使用
小心并确认它仍然
当您升级服务器时有效。
这是如何使用它的示例
黑客:

CREATE TRIGGER fake_statement_trigger
BEFORE INSERT ON sometable
FOR EACH ROW
BEGIN
DECLARE v_row_count INT DEFAULT ROW_COUNT( );
IF v_row_count <> 1 THEN
-- Your code here
END IF;
END;

From the Book 'High Performance MySQL Second Edition':

Sometimes you can even work around the
FOR EACH ROW limitation. Roland Bouman
found that ROW_COUNT( ) always reports
1 inside a trigger, except for the
first row of a BEFORE trigger. You can
use this to prevent a trigger’s code
from executing for every row affected
and run it only once per statement.
It’s not the same as a per-statement
trigger, but it is a useful technique
for emulating a per-statement BEFORE
trigger in some cases. This behavior
may actually be a bug that will get
fixed at some point, so you should use
it with care and verify that it still
works when you upgrade your server.
Here’s a sample of how to use this
hack:

CREATE TRIGGER fake_statement_trigger
BEFORE INSERT ON sometable
FOR EACH ROW
BEGIN
DECLARE v_row_count INT DEFAULT ROW_COUNT( );
IF v_row_count <> 1 THEN
-- Your code here
END IF;
END;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文