表交互的多个MySQL操作

时间:2014-04-09 08:38:17

标签: mysql triggers sql-update

在以下场景中进行的最佳方式是什么

我的first_table包含Datas,第二个与ID相关(ID = id = related),并且没有涉及外键

first_table
----------------------------------------------
ID   | Datum      | Type          |Status
----------------------------------------------
123  | 2013-09-11 |   relational  |   1
----------------------------------------------
1234 | 2013-09-11 |   relational  |   1
----------------------------------------------
185  | 2013-09-11 |   normal      |   1
----------------------------------------------

在我的second_table中有一个关于交互的状态更新,这意味着我将0设置为值。

这就是我向前迈进的问题,因为我试图在mysql端解决这个问题而不涉及服务器端脚本

如果SELECT * FROM second_table WHERE id_related = '1234' AND status = 1为空,我想更新我的第一个表状态设置它的值为0

UPDATE first_table SET status = 0 WHERE ID = 1234

second_table
---------------------------------------------
ID | id_related   | some_column_value | status
---------------------------------------------
1  | 123          | some_column_value | 1
---------------------------------------------
2  | 123          | some_column_value | 0
---------------------------------------------
3  | 1234         | some_column_value | 0
---------------------------------------------
4  | 1234         | some_column_value | 0
---------------------------------------------

有没有办法通过MySQL设置触发器来完成所有这些?

1 个答案:

答案 0 :(得分:1)

如果您需要在INSERT期间保持状态值是最新的,您可以创建触发器:

CREATE TRIGGER `tr1` AFTER INSERT ON `second_table`
  FOR EACH ROW
BEGIN
    IF NOT EXISTS (SELECT * FROM second_table WHERE status = 1 AND id_related = NEW.id_related ) THEN
        UPDATE first_table SET status = 0 WHERE ID = NEW.id_related;
    ELSE
        UPDATE first_table SET status = 1 WHERE ID = NEW.id_related;
    END IF;
END;

这将在first_table中保持1状态,而second_table中的相关行具有1作为状态,否则为0。 如果你需要对second_table的UPDATE执行相同的操作,你需要创建具有相同主体的'AFTER UPDATE'触发器。