【问题标题】:MySQL Update in Multiple Tables... trigger? cascade?多个表中的 MySQL 更新...触发?级联?
【发布时间】:2011-06-28 14:38:09
【问题描述】:

我有三个关联的表。类别包含用户为其输入值的选项,简化如下...

group
-----
id
name
active

option
------
id
group_id
name
active

user_option
-----------
id
opton_id
value
active

我的问题是处理组被停用的情况的最佳方法是什么。我过去所做的是查找选项 id,其中 group_id = 被停用的组 id。然后我获取返回的 id 列表并停用 user_option,例如...

set active=0 where option_id in (list of ids)

然后我更新选项,然后我更新组。

我很感兴趣是否有办法通过触发器或级联来做这种事情。我从来没有在 MySQL 中使用过,我想我会看看解决这个问题的最佳方法是什么。

【问题讨论】:

    标签: mysql sql triggers sql-update


    【解决方案1】:

    ON UPDATE CASCADE 添加到USER_OPTION.active 列上的外键应该是实现所需功能per the documentation 所必需的全部内容。假设外键约束已经存在,使用:

    ALTER TABLE 
    MODIFY active FOREIGN KEY fk_name (active) REFERENCES OPTION(active) ON UPDATE CASCADE
    

    【讨论】:

    • 如果是 MyISAM,请参阅不支持 FKey。是否有一个查找/更新的触发选项,或者这基本上与以“旧”方式运行它相同?谢谢。
    • @Don:不确定我在哪里读到的,但我认为这是 InnoDB 表,因为是的,你必须使用触发器来实现相同的功能。
    • 谢谢。这些表目前是 ISAM,但我正在评估 select/insert 负载,看看是否有必要转换它们以增加灵活性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多