专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

SQL多表修改_数据库

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/5 15:45:56       共计:3595 浏览

SQL多表修改?

我理解题主问的是有100个表,这100个表结构完全一样,要给这100个表“同时”alter table,而不是在这100个表上面同时update数据。结论是:没什么好的办法,只能挨个改。这里面涉及两个问题:1.表比较大的情况下,改表结构锁表时间很长;有主从同步的时候,改表会导致从库延迟。这个可以用pt-online-schema-change 来解决,可以把改表结构对线上系统的影响降到最低(用新结构建空表-逐条复制数据-rename,同时用触发器保证复制过程中对数据的增删改也应用到新表上,这些操作都可以不引起可观延迟地同步到从库)2.改表结构有先后,改的过程中不能保证每个分表结构一致。如果正常挨个改的话,不一致是肯定存在的,没法解决,只能让程序尽量兼容。或者用online-schema-change类似的思路,把改表的前两个步骤做了(建空表,复制并同步数据),最后统一rename,这样其实还是有一瞬间100个表不完全一致,但是能把不一致的时间缩短到最小。——以前某公司就有这样的100个表,而且 ORM还在内存中缓存了表结构,导致改表结构造成的影响很大。最早的时候一改表结构代码就报错,因为有表结构缓存,只要结构变了拼的SQL语句就会出问题,只能改完立刻重启web服务清除缓存。为了解决这个问题,就改用mysql返回的metadata来生成ORM对象,让读查询都脱离这个表结构缓存。然后对这种100个表不一致问题,在这100个表之外建一个单独的结构表xxx_struct,这个表不存数据,只用它来生成表结构缓存,在改表结构的流程上做个规范,加字段的时候先改存数据的表结构,然后再改_struct,删字段相反,总之保证_struct表比真实表字段少,就没啥问题了。

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:Java为什么要打war包_数据库 | ·下一条:mysql 查询最多的,多个MYSQL表_数据库

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有