如何快速的进行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脚本标准 各文件夹存放的脚本说明 存储过程:除“基础_”开头的所有存储过程,包含新增.修改.删除.列表.提交.审核. 基础数据:“基础_”开头的存储过程,用于下拉列表的数据加载公共方法. ...
随机推荐
- STM32进阶之串口环形缓冲区实现(转载)
转载自微信公众号“玩转单片机”,感谢原作者“杰杰”. 队列的概念 在此之前,我们来回顾一下队列的基本概念:队列 (Queue):是一种先进先出(First In First Out ,简称 FIFO) ...
- 2,PyAudio 实现录音 自动化交互实现问答
Python 很强大其原因就是因为它庞大的三方库 , 资源是非常的丰富 , 当然也不会缺少关于音频的库 关于音频, PyAudio 这个库, 可以实现开启麦克风录音, 可以播放音频文件等等,此刻我们不 ...
- WPF中,如何将绑定源设置到单件实例
原文:WPF中,如何将绑定源设置到单件实例 WPF中,如何将绑定源设置到单件实例 周银辉 大概两个月前,曾有位朋友问我:如 ...
- c/c++ 随机数生成
当程序需要一个随机数时有两种情况下使用: 1.程序中只需使用一次随机数,则调用rand()函数即可 2.程序需要多次使用随机数,那么需要使用srand()函数生成随机数种子在调用rand()函数保证每 ...
- Linux下中文乱码问题
记录一下配置centos的时候遇到的一些常见问题 写了一个python脚本,有中文注释,而且会输出一些用户名称,其中包含中文字符.显示的时候出现乱码. 解决方案: 参见博客: Linux基础:中文显示 ...
- cf987f AND Graph
#include <iostream> #include <cstdio> using namespace std; int n, uu, m; bool a[4500005] ...
- I两种冒泡算法
两种冒泡算法: 第一个循环,I 定位当前坐标,第二个循环 把 I 之后的每个数都与 I 比较(比 I 小的都去坐标I),第二个循环之后 坐标 I 为数组里最小的数值. 效率比较高的冒泡算法: stat ...
- ES6 语法糖
重新认识ES6中的语法糖:https://segmentfault.com/a/1190000010159725
- Unity和Lua交互
用lua就表示项目用到了热更新,通常每次热更新都会从服务器获取最新的lua脚本放到Android/ios设备的本地目录下,但是lua应该放到哪个目录下呢,这里就先说说lua里面的路径问题 1.不可以放 ...
- CSS实现自适应下保持宽高比
在项目中,我们可能经常使得自己设计的网页能自适应.特别是网站中的图片,经常要求在网页放大(或缩小)时,宽高同时放大(或缩小),而且不变形(即保持正常的长宽比).为了不变形,常用的方法就是设置width ...