如何快速的进行sql脚本升级
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语句,可以为我们升级脚本减少一些时间。
如何快速的进行sql脚本升级的更多相关文章
- SNF快速开发平台MVC-EasyQuery-拖拽生成SQL脚本
在之前介绍一下EasyQuery工具SNF开发平台WinForm-EasyQuery统计分析-效果-非常牛逼的报表查询工具 Winform开发框架之图表报表在线设计器-报表-SNF.EasyQuery ...
- flyway实现java 自动升级SQL脚本
flyway实现java 自动升级SQL脚本 为什么要用Flyway 在日常开发中,我们经常会遇到下面的问题: 自己写的SQL忘了在所有环境执行: 别人写的SQL我们不能确定是否都在所有环境执行过了: ...
- Winform开发框架之字典管理模块的更新,附上最新2013年全国最新县及县以上行政区划代码sql脚本
在很多项目里面,字典管理是必备的项目模块,而这个又是比较通用的功能,因此可以单独做成一个通用字典管理,例如这个模块,可以通过集成的方式,使用在我的<Winform开发框架>.<WCF ...
- 11月16日《奥威Power-BI基于SQL的存储过程及自定义SQL脚本制作报表》腾讯课堂开课啦
上周的课程<奥威Power-BI vs微软Power BI>带同学们全面认识了两个Power-BI的使用情况,同学们已经迫不及待想知道这周的学习内容了吧!这周的课程关键词—— ...
- Oracle 项目中 SQL 脚本更新方式
DECLARE hasVersion ); dbVersion ); BEGIN ) INTO hasVersion FROM ELB_SETTINGS E WHERE E.KEY='dbVersio ...
- Navicat 导入sql脚本文件
Navicat 导入sql脚本文件 我在组建自己工作用的数据库时要导入.sql脚本文件,用cmd窗口导入太慢,navicat的导入向导里又无导入sql脚本的选项, 但不是navicat中没有导入sql ...
- [转载]循规蹈矩:快速读懂SQL执行计划的套路与工具
作者介绍 梁敬彬,福富研究院副理事长.公司唯一四星级内训师,国内一线知名数据库专家,在数据库优化和培训领域有着丰富的经验.多次应邀担任国内外数据库大会的演讲嘉宾,在业界有着广泛的影响力.著有多本畅销书 ...
- 使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)
在实际开发中,可能很少人会手写sql脚本来操作数据库的种种.特别是微软的MS SQL Server数据库,它的SQL Server Management Studio对数据库的图形化操作极致简便,从而 ...
- .net软件开发脚本规范-SQL脚本标准
一. SQL脚本标准 各文件夹存放的脚本说明 存储过程:除“基础_”开头的所有存储过程,包含新增.修改.删除.列表.提交.审核. 基础数据:“基础_”开头的存储过程,用于下拉列表的数据加载公共方法. ...
随机推荐
- TensorFlow深层神经网络常用方法
深度学习所示深层神经网络的代名词,重要特性:多层.非线性. 若只通过线性变换,任意层的神经网络模型与单层神经网络模型的表达能力没有任何区别,这是线性模型的局限性.对于线性可分的问题中,线性模型可解决, ...
- Javaweb——四则运算---18.11.01
---恢复内容开始--- test.jsp <%@ page language="java" contentType="text/html; charset=utf ...
- python2.7练习小例子(二十四)
24):1.题目:利用递归方法求5!. 程序分析:递归公式:fn=fn_1*4! #!/usr/bin/python # -*- coding: UTF-8 -*- def fact( ...
- python2.7练习小例子(十一)
11):题目:判断101-200之间有多少个素数,并输出所有素数. 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数. ...
- linux io 学习笔记(01)---锁,信号量
1.采用信号量访问:当有段临界代码,需要保证排他的访问一个资源. 2.sudo dmesg -c 消除dmesg缓冲 3.互斥锁:代表的是一种锁资源,互斥锁的工作原理是:保证对共享资源操作的原子性 ...
- C++11中initializer lists的使用
Before C++11,there was no easy way to do things like initialize a std::vector or std::map(or a custo ...
- 第5模块闯关Bootstrap
“行(row)”必须包含在 .container (固定宽度)或 .container-fluid (100% 宽度)中,以便为其赋予合适的排列(aligment)和内补(padding). 通过“行 ...
- pxe无人值守安装linux机器笔记----摘抄
1. 基建工作 1.关闭防火墙 a)service iptables stop b)service ip6tables stop c)chkconfig iptables off d)chkconfi ...
- Excel拼接字符串
有时候,需要把一些Excel表格中的内容进行拼接,比如A4行的值是前面三行值的加起来.在Excel中可以使用&来进行这种操作.如果数据非常多,就可以使用这个来进行批量操作.
- Android PopupWindow 疑难杂症之宽度WRAP_CONTENT
一直以来都觉得 Android 中的 PopupWindow 不好用.主要有以下两点:1.宽度不好控制2.位置不好控制 今天单说第1点. 由于应用有好几种国家的语言,加上各设备宣染效果不完全一样,对p ...