如何快速的进行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脚本标准 各文件夹存放的脚本说明 存储过程:除“基础_”开头的所有存储过程,包含新增.修改.删除.列表.提交.审核. 基础数据:“基础_”开头的存储过程,用于下拉列表的数据加载公共方法. ...
随机推荐
- Hash学习笔记
啊啊啊啊,这篇博客估计是我最早的边写边学的博客了,先忌一忌. 本文章借鉴与一本通提高篇,但因为是个人的学习笔记,因此写上原创. 目录 谁TM边写边学还写这玩意? 后面又加了 Hash Hash表 更多 ...
- go学习笔记-流程控制(if/else,for/range)
流程控制(if/else,for/range) if if条件判断语句的语法概括起来就是:如果满足条件就做某事,否则做另一件事. func testIf() { num := 10 if num &l ...
- P1396 营救(最小瓶颈路)
题目描述 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动的热泪盈眶,开起了门…… 妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈妈丰富的经验告诉她小 ...
- NSDictionary底层实现原理
一言以蔽之:在OC中NSDictionary是使用hash表来实现key和value的映射和存储的. 那么问题来了什么是hash表呢? 哈希表(hash表): 又叫做散列表,是根据关键码值(key v ...
- [转]Visual Studio 项目类型 GUID 清单
转自:https://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs Complete li ...
- jmeter之HTTP请求
1.添加一个线程组:Test plan_添加_Threads(users)_线程组(右键操作),如下图: 2.添加一个HTTP请求:线程组_添加_sample_HTTP请求(右键操作),如下图: 3. ...
- Cassandra 在CQL中使用函数
CQL 3.1 最后更新 2015年10月10日 maxTimeuuid() now() dateOf() minTimeuuid() --假设表结构如下 create table user ( us ...
- hadoop 环境配置
HADOOP_HOME E:\tool\eclipse\hadoop-2.7.3 HADOOP_USER_NAME ambari-qa path: %HADOOP_HOME%/bin
- WebSocket 与 HTTP/2
个人笔记 WebSocket WebSocket 是一个双向通信协议,它在握手阶段采用 HTTP/1.1 协议(暂时不支持 HTTP/2). 握手过程如下: 首先客户端向服务端发起一个特殊的 HTTP ...
- MySQL日常管理
DB2最佳分页语句 SELECT * FROM ( SELECT inner2_.*, ROWNUMBER() OVER(ORDER BY ORDER OF inner2_) AS rownumber ...