MySQL INSERT ON DUPLICATE UPDATE

时间:2010-11-12 07:54:35

标签: mysql

创建单个SQL语句时,我遇到了一个复杂的问题。 我有三个表,活动,非活动和历史。它们是相同的,除了只有活动中的字段指针被标记为主键。

Struct:
-pointid int
-income_time timestamp
-outcome_time timestamp
-receipted_time timestamp
-type int
-isack int

我使用“INSERT INTO active(pointid,income_time,outcome_time,receipted_time,type,isack)VALUES(100,CURRENT_TIMESTAMP,NULL,NULL,15,0)在DUPLICATE KEY UPDATE上插入查询到活动状态..... < / p>

并且需要帮助来构造查询的结尾,它将起到以下作用:

- 如果指针的行不存在,请执行简单的插入
- 如果确实存在,请检查类型是否相同。如果是的话,什么也不做 -if type为diffenent,ack = 0,copy row为inactive(并将outcome_time设置为CURRENT_TIMESTAMP),然后更新active(current,income_time,isack)中的当前行。
-if type如果不同,并且ack = 1,则将行复制到历史记录(并将outcome_time设置为CURRENT_TIMESTAMP),然后更新active中的当前行(type,income_time,isack)。

从逻辑上讲,我认为这可能是使用IF语句的,但还没有找到一个可行的解决方案。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为这超出了单个查询的能力。它不能有条件地更新不同的表。您可以使用触发器,编写存储过程,或者只是拥有一个不需要此的理智架构。

相关问题