Mysql插入是否有条件?

Mysql插入是否有条件?,mysql,Mysql,我有一个mysql表,只有3列id——主键/状态/时间戳。我定期收到一条状态消息,该消息可以是0或1,我需要将其插入该表中,但仅当最后插入的状态不同时。 只有一个mysql查询,有没有办法做到这一点 基本上我需要这样做: SELECT status FROM `status_e_distr_c01` order by id DESC LIMIT 1 然后将我的状态消息与选择结果进行比较,如果不同,则执行插入,如果不…不执行任何操作 那么如何在一个mysql查询中实现这一点呢? 非常感谢假设要插

我有一个mysql表,只有3列id——主键/状态/时间戳。我定期收到一条状态消息,该消息可以是0或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无关。请分享更多详细信息-该问题询问插入,而您唯一的尝试是选择