Mysql插入是否有条件?
我有一个mysql表,只有3列id——主键/状态/时间戳。我定期收到一条状态消息,该消息可以是0或1,我需要将其插入该表中,但仅当最后插入的状态不同时。 只有一个mysql查询,有没有办法做到这一点 基本上我需要这样做:Mysql插入是否有条件?,mysql,Mysql,我有一个mysql表,只有3列id——主键/状态/时间戳。我定期收到一条状态消息,该消息可以是0或1,我需要将其插入该表中,但仅当最后插入的状态不同时。 只有一个mysql查询,有没有办法做到这一点 基本上我需要这样做: SELECT status FROM `status_e_distr_c01` order by id DESC LIMIT 1 然后将我的状态消息与选择结果进行比较,如果不同,则执行插入,如果不…不执行任何操作 那么如何在一个mysql查询中实现这一点呢? 非常感谢假设要插
SELECT status FROM `status_e_distr_c01` order by id DESC LIMIT 1
然后将我的状态消息与选择结果进行比较,如果不同,则执行插入,如果不…不执行任何操作
那么如何在一个mysql查询中实现这一点呢?
非常感谢假设要插入的列的值为:status,:timestamp,您可以这样做:
INSERT INTO status_e_distr_c01 (status, timestamp)
SELECT :status, :timestamp
FROM dual
WHERE :status <>
COALESCE((SELECT status FROM status_e_distr_c01 ORDER BY id DESC LIMIT 1), NOT :status)
即使表是空的,代码也会工作。
如果您的MySql版本为5.7+,则可以省略dual。
请参阅简化的。您可以使用插入。。。选择从双伪表中,检查目标表是否为空,或者新状态是否与在子查询中选择的上一个不同
INSERT INTO status_e_distr_c01
(status)
SELECT ?
FROM dual
WHERE NOT EXISTS (SELECT *
FROM status_e_distr_c01)
OR ? <> (SELECT status
FROM status_e_distr_c01
ORDER BY id DESC
LIMIT 1);
插入状态\u e\u发行版\u c01状态
选择@new_status
从选择状态
来自状态\u e\u发行版\u c01
按ts DESC LIMIT 1子查询订购
其中subquery.status!=@新的联合国地位;
如果目标表为空,PS将失败。必须在不进行检查的情况下插入most第一行
更新
插入状态\u e\u发行版\u c01状态
选择@new_status
何处@new_status!=合并选择状态
来自状态\u e\u发行版\u c01
按ts DESC限制1、2订购;
对空桌子也有用
与存储过程相同:
创建过程插入\u(如果\u在新\u状态INT中更改)
插入状态\u e\u发行版\u c01状态
选择新状态
新的_状态在哪里!=合并选择状态
来自状态\u e\u发行版\u c01
按ts DESC限制1、2订购;
是否要插入或更新?为什么只在状态不同时才插入?我在节点自动化中使用它,每分钟获取一次状态,所以我不想在表中填入所有值。基本上,如果我只在不同的时候插入,那么我知道什么时候更改了。我不想更新,因为我需要一个历史记录……您是否收到与作为主键的id相关的状态?或者主键是自动递增的?id只是自动递增的,状态与id无关。请分享更多详细信息-该问题询问插入,而您唯一的尝试是选择