方式一

将 insert 关键字改为 REPLACE,作用效果是对比索引字段,索引相同删除原有数据,再新增一条数据,如果新数据和原有的数据完全相同,删除原来数据,保存最新数据

  1. REPLACE INTO zcq.m_homework_correct_state (id, state, submit_time, correct_time)
  2. VALUES ('0002d52c0d828a35cf13231e2added51', 1, '2021-09-14 12:28:53', '2021-09-14 12:28:53');

方式二

关键字 ON DUPLICATE KEY UPDATE 在原数据上进行修改不会删除原来数据可控制更新的字段(只想更新个别字段)

INSERT INTO zcq.m_homework_correct_state (id, state, submit_time, correct_time)
VALUES ('0002d52c0d828a35cf13231e2added56', 3, '2021-09-14 12:28:53', '2021-09-14 12:28:53')
ON DUPLICATE KEY UPDATE state= '3',
                        submit_time='2021-09-14 12:28:53';

如果是这种场景:数据存在时,把 state 增加 3(即传入的 state 值),可以利用 values(column) 方式传入:

INSERT INTO zcq.m_homework_correct_state (id, state, submit_time, correct_time)
VALUES ('0002d52c0d828a35cf13231e2added56', 3, '2021-09-14 12:28:53', '2021-09-14 12:28:53')
ON DUPLICATE KEY UPDATE state= state + values(state),
                        submit_time='2021-09-14 12:28:53';