2014-04-09 34 views
0

什么是在以下情况下进行的最佳方式多个MySQL操作

我有我的first_table持有DATAS和与此有关的ID的第二个(ID = ID =有关)和没有外键参与

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来设置触发器?

+0

如果第一个表没有具有该特定“ID”值的记录,该怎么办?你想执行一个INSERT吗? –

+0

如果第一个表中没有记录,那么第二个表中的记录将不存在 – fefe

+0

如果第二个表中的记录存在,该怎么办?你还想要更新第一个表吗? –

回答

1

如果你需要保持状态值,对最新插入的时候,你可以创建触发器:

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'触发器。

+0

感谢您的反馈我只是试着用你的查询,但当第二个表中的所有匹配记录状态设置为0时,我的第一个表中没有状态更新0 – fefe

+0

跟踪第二个表的所有更改是不够的。只有当现有记录已经一致时,这才会用于更新。如果插入记录,则还应控制状态值,例如,创建相同的'AFTER INSERT'触发器。 – Stropharius