数据库表快速更新

来源:互联网 发布:sdrsharp linux 编辑:程序博客网 时间:2024/06/05 20:40

一,背景。


  • 1,在线上版本开发的时候,会经常遇到一些对原来的表字段进行拆分,将表格的字段复制到另一个表。主要介绍几种数据库字段更新的方式。

二, 更新方式。


  • 1,使用java代码进行更新,不过会经常需要读取数据库,更新数据的值。适合处理很复杂的逻辑,但是更新时间会长点,有可能影响到线上的服务。
  • 2,使用mysql语句进行更新,其实基本上都可以解决数据库更新的问题。处理的速度也会快很多。

三,mysql数据库更新方式。


  • 1,大表间的数据更新。对于从一张几百万的表中获取两个字段的数据,并且又匹配相应的内容存到另一张表中。直接的从这张表中获取两个字段数据并且更新是会比较久的,而且会造成锁表的情况, 在服务器不能停机更新的时候,这个就会比较麻烦,所以比较好的方式。是一张表中的需要的几个字段都select出来,并且存入到另一张表中,并且对其建立相应的索引。再匹配待更新表的字段,这样既不会影响到线上的功能运转,也可以很快地实现。
    • 其中的原理是取出自己想要的数据,而不是全部的数据,并且将相应的数据建立好索引,加快查询速度。

四,重复数据的查找及删除。


  • 1,查找重复的数据时,并且重复记录是一个字段的时候。用得比较多的就是select * from user where is_deleted = 0 group by phone having count(*) > 1 这种的方式。
  • 2,但是如果是查找重复记录中(多个字段),就需要换一种方式。

select * from user a
where (a.peopleId,a.seq) in (select peopleId,seq from user group by peopleId,seq having count(*) > 1)

* 3,删除重复记录中重复记录。并且只留有最小的id。
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

原创粉丝点击