mysql递归更新触发器

wwodge7n  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(300)

我发现有很多关于这方面的讨论,看来mysql根本不允许使用递归触发器。其他讨论建议不要尝试这样做,但我对触发器的设计相当有信心,因此它不会冒无限循环的风险。
我想我是在请求确认mysql中的这个限制/设计选择,以及任何关于我尝试实现的替代方法的建议。
---'问题'---
总之,我有一个数据库,其中包括一个联系人/用户表,以及一些“信息”表,如地址/电话/电子邮件。就这个问题而言,我只关注地址。地址表有一个contact\ id列,用于指定它所属的联系人。
为了快速澄清,一个联系人的帐户可以没有一个或多个地址,这就是为什么我将这些信息分离到一个单独的表中。
当用户登录到他们的帐户时,我会进行查询,得到一个带有联系人id的地址列表,然后允许他们编辑/删除/添加新条目等。
我现在想为联系人指定一个主地址,因此在完成订单时,他们可用地址的下拉列表默认为他们的主地址。
我正在尝试在地址更新时设置触发器,因此如果is\u primary col从0/false更新为1/true,它也会更新以前的主地址。
实际上,我只希望addresses表中每个联系人的id有一行可以将isprimary设置为1/true。
---接近---
我写了下面的触发器(我在更新前后都试过)

CREATE TRIGGER tr_addresses_primary_bu 

BEFORE UPDATE ON addresses 

FOR EACH ROW 

BEGIN

    IF OLD.is_primary = 0 AND NEW.is_primary = 1 THEN

        UPDATE addresses

        SET addresses.is_primary = 0

        WHERE addresses.is_primary = 1 

        AND addresses.contact_no = NEW.contact_no;

    END IF;

END;

(请忽略倍数“;”分隔符(目前的情况)
我相信扳机应该是正确的。
更新地址前
if is\u primary从0/false变为1/true(即它使主
将具有相同联系人id的主地址更改为0/false(is\u primary=1/true)
mysql(通过phpmyadmin访问)允许我添加触发器,但是当触发器运行时(当我将行从0更新为1时)会抛出一个错误。
---为什么我认为我的方法应该有效---
我理解为什么更新表语句,在更新同一个表时调用的触发器内会导致问题。但我认为这应该由设计师来决定。
此触发器不可能命中无限循环,因为'inside'update语句将始终将old.is\u primary=1更新为new.is\u primary=0,并且触发器更新将查找old.is\u primary=0到new.is\u primary=1。
知道mysql没有给我控制权去做我需要的事情,把我从一个我已经考虑和解决过的可能的问题中解救出来,我有点沮丧。
---问题---
有人知道我如何让这个触发器在mysql中运行吗?
有没有人看到我的触发器有问题,我可能忽略了?
或者有人对我描述的情况有什么建议吗?
我知道我可以添加一个主地址表,并在触发器中更改它。但我真的想避免添加一个单独的表。但我想如果它能实现我需要的功能,我应该考虑一下。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题