在以下场景中进行的最佳方式是什么
我的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设置触发器来完成所有这些?
答案 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'触发器。