如何在触发器中放置多个更新?

Mar*_*uni 4 mysql sql triggers phpmyadmin

我希望你能在这里帮助我。我正在使用MySQL + PhpMyAdmin,并且在此问题中有2个表。

表1:帐户-ID,帐户名,网站等,等等...
表2:域-ID,域名,帐户名

我将这些查询插入了2个触发器。

在更新
更新域之前,帐户
设置domains.account_name = NULL
,其中account.website!= domains.domain_name

在更新
更新域之后,帐户
设置domains.account_name = accounts.account_name
,其中domains.domain_name = main_accounts.website

有了这些,当我更新accounts表中的内容时,它将自动从域表中删除account_name,并且如果更新了某个帐户,则会放置新的account_name。

下图将显示示例。
尚未更新的
----------
帐户表
在此处输入图片说明

域表
在此处输入图片说明 ----------
----------
更新了视图。
----------
----------
帐户表
在此处输入图片说明

域表
在此处输入图片说明

因此,在第二个帐户表映像上,我更改了域,并且域表已自动更新。我只想使1个触发器包含这2个更新查询。我不知道是否可能,因为完成此操作后,我可能还需要知道如何从1个触发器更新多个不同的表。我问的原因是因为我需要为每个正在使用的子表分配帐户名。例如,主表是帐户表和子表需要被更新:
domains.account_name
ip_address.account_name
phones.account_name
payments.account_name

因此,我不知道在更新主表“ accounts”时是否甚至可以更新“ account_name”列下的那些子表。

谢谢。希望我的问题清楚。:D:D

Llo*_*nks 5

您可以使用BEGIN和END将多个语句分组为一个触发器。

例:

DELIMITER $$

CREATE TRIGGER my_trigger BEFORE INSERT ON accounts
FOR EACH ROW
BEGIN
    -- Statement one
    UPDATE domains
    SET domains.account_name = accounts.account_name
    WHERE domains.domain_name = main_accounts.website;
    -- Statement two
    UPDATE another_table
    SET another_table.column_name = accounts.account_name
    WHERE another_table.domain_name = accounts.some_column;
    -- More UPDATE statements
END$$
Run Code Online (Sandbox Code Playgroud)