sql脚本升级即从一个老的脚本升级到一个新的全量的脚本。比如公司有某一个项目,有的客户已经用这个项目了,数据库里面去掉以前的初始化数据外,现在还有了客户自己的数据。但是这个版本中有严重的bug,所以为了让最新的war包适配以前数据库,必须对以前的数据库进行升级。在这里脚本升级以mysql脚本升级到mysql脚本(mysql升级到oracle,oracle升级到mysql这里没有考虑)

在升级脚本的过程中我们的已知条件是:以前老版本的初始化脚本(包括创建表,初始化数据)这里用A表示,还有新版本的初始化脚本(包括创建表,初始化数据)这里用B表示。所以升级脚本(B-A)

我们已知B-A的内容可能有新增了的一些表,一些索引,一些视图等等。还有多了很多初始化数据。

如果我们直接用肉眼未免太慢,也不保险。

所以必须通过其他方式解决。

第一步:看新脚本中比老脚本中多了哪些表,哪些索引:

sql语句是:其中TABLE_SCHEMA='A'或者TABLE_SCHEMA='B'就是我们常讲的数据库名。这个sql检查的是A库中比B库中多的表。

select * from (select table_name from information_schema.`TABLES` where TABLE_SCHEMA='A') a where a.table_name  not in (select table_name from information_schema.`TABLES` where TABLE_SCHEMA='B');

select * from (select index_name from information_schema.STATISTICS where TABLE_SCHEMA='B') a where a.index_name not in (select index_name from information_schema.STATISTICS where TABLE_SCHEMA='B');

第二步是看新脚本中的表结构是否改变,也就是是否在一个表中增加了一列,或者减少了一列,或者某列的数据类型和长度改变了。

查询数据库A的每张表中的列数

设A=select a.table_name,count(a.column_name) column_count from information_schema.columns a
where table_schema = 'A'
group by a.table_name order by a.table_name;

查询数据库B的每张表中的列数

设B:select a.table_name,count(a.column_name) column_count from information_schema.columns a
where table_schema = 'A'
group by a.table_name order by a.table_name;

则查询的语句是:

select * from A LEFT JOIN  B on A.table_name=B.table_name;

把上面的A和B代入得到总的sql语句,sql语句如下所示:

select * from (select a.table_name,count(a.column_name) column_count from information_schema.columns a
where table_schema = 'thailand'
group by a.table_name order by a.table_name) A LEFT JOIN (select a.table_name,count(a.column_name) column_count from information_schema.columns a
where table_schema = 'thailand'
group by a.table_name order by a.table_name) B on A.table_name=B.table_name;

查询的结果如下图所示:

通过这两个sql语句,可以为我们升级脚本减少一些时间。

最新文章

  1. android之读取联系人信息
  2. python运行报错:urllib2.URLError: <urlopen error [Errno 10061] >
  3. 打开Eclipse时出现"The Eclipse executable launcher was unable to locate its companion shared library"情况的解决办法
  4. uva 10668
  5. 论文笔记之:DeepCAMP: Deep Convolutional Action & Attribute Mid-Level Patterns
  6. javamail模拟邮箱功能--邮件删除-中级实战篇【邮件标记方法】(javamail API电子邮件实例)
  7. ntoskrnl.exe损坏或丢失的解决方式
  8. Visual C++ 打印编程技术-打印基础知识
  9. asp.net页面按Enter键IE不提交表单
  10. SpringBoot整合Mybatis,多数据源,事务,支持java -jar 启动.
  11. SoDiaoEditor电子病历编辑器更新至V3版本,愿与各位一路同行!
  12. UOJ #206. 【APIO2016】Gap
  13. while循环--登录
  14. 关于RandomAccessFile一个坑!!!!
  15. 开源项目商业模式分析(2) - 持续维护的重要性 - Selenium和WatiN
  16. MySQL数据库一个字段对应多个值得模糊查询和多个字段对应一个模糊查询
  17. 值得收藏的JSP连接mysql数据库的例子
  18. html部分常用标签的含义及作用
  19. (转)Mysql 多表查询详解
  20. HTML-IE6复制BUG

热门文章

  1. Redis缓存数据库的安装与配置(3)
  2. C# 实现窗口无边框,可拖动效果
  3. mybatis报表,动态列与查询参数+行列转换
  4. 【Python让生活更美好01】os与shutil模块的常用方法总结
  5. python2.7练习小例子(二十八)
  6. ArcPy:GeoJSON转ArcGIS Geometry
  7. 小程序如何去掉button组件的边框
  8. crm踩坑记(一)
  9. VMware快照
  10. MySQL训练营01