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

时间:2015-04-24 19:16:53

标签: mysql sql triggers phpmyadmin

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

表1:帐户 - id,account_name,网站等等。
表2:域 - id,domain_name,account_name

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

更新前
更新域名,帐户
set domains.account_name = NULL
其中accounts.website!= domains.domain_name

更新后
更新域名,帐户
set domains.account_name = accounts.account_name
其中domains.domain_name = main_accounts.website

使用这些,当我更新accounts表中的某些内容时,它会自动从domains表中删除account_name,并在更新某个帐户时添加新的account_name。

下面的图片将显示示例 表尚未更新:
----------
帐户表
enter image description here

域名表
enter image description here ----------
----------
更新了视图。
----------
----------
帐户表
enter image description here

域名表
enter image description here

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

所以,我不知道是否有可能更新列#34; account_name"下的子表。当主表"帐户"已更新。

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

1 个答案:

答案 0 :(得分:4)

您可以使用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$$