Mysql如何实现批量数据存在则更新,否则插入?

有一批数据入库,如果数据存在就直接更新,否则插入。网上找了都是用的ON DUPLICATE KEY UPDATE或者replace into这种,这样的只能在unique字段下才可以,但是我这里不一样,需要类似于where条件的,比如满足在某时间段则更新,否则插入。有没有一个高效一点的方法?用程序循环跑明显不太现实。。。

阅读 5.5k
4 个回答

where 的没有现成语法,即使是 Postgresql 这种级别的也没有,更别说 MySQL 了。
要直接解决这个问题,只能自己写代码,不管你是在应用中写,还是在数据库中定义一个存储过程。
MySQL 单表数据撑爆百万级,已存在的数据全取出来在应用中自己创建索引,用来判断是更新还是插入,没什么不现实的。

你可以加一个索引啊。。。用完再删掉

首先你这个问题有点自相矛盾了,你想实现存在就更新,不存在就插入,那你这个判断的依据呢,可不可以理解成where条件里面就是唯一的,那如果是唯一的,直接加唯一索引就好了

什么叫程序循环跑不太现实?你这里的批量数据这个集合里面肯定是分为插入和更新两种的,至于是那种操作还要和原来的数据比较,不管怎么着每条数据都要比较一次吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题