-- 使用test库 `test_project_management` `oel_project_management`

USE test;
-- 旧表
DROP TABLE old_column_info;
CREATE TABLE `old_column_info` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`table_schema` VARCHAR(64) NOT NULL COMMENT '数据库',
`table_name` VARCHAR(64) NOT NULL COMMENT '表名',
`table_comment` VARCHAR(128) DEFAULT NULL COMMENT '表备注',
`column_name` VARCHAR(64) NOT NULL COMMENT '列名',
`column_type` VARCHAR(32) NOT NULL COMMENT '列类型',
`is_nullable` VARCHAR(8) NOT NULL COMMENT '是否可为空',
`column_default` VARCHAR(32) DEFAULT NULL COMMENT '默认值',
`column_comment` VARCHAR(128) DEFAULT NULL COMMENT '列备注',
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8; -- 旧表
DROP TABLE new_column_info;
CREATE TABLE `new_column_info` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`table_schema` VARCHAR(64) NOT NULL COMMENT '数据库',
`table_name` VARCHAR(64) NOT NULL COMMENT '表名',
`table_comment` VARCHAR(128) DEFAULT NULL COMMENT '表备注',
`column_name` VARCHAR(64) NOT NULL COMMENT '列名',
`column_type` VARCHAR(32) NOT NULL COMMENT '列类型',
`is_nullable` VARCHAR(8) NOT NULL COMMENT '是否可为空',
`column_default` VARCHAR(32) DEFAULT NULL COMMENT '默认值',
`column_comment` VARCHAR(128) DEFAULT NULL COMMENT '列备注',
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8; -- 插入旧表结构
INSERT INTO `old_column_info` (
`table_schema`,
`table_name`,
`table_comment`,
`column_name`,
`column_type`,
`is_nullable`,
`column_default`,
`column_comment`
)
SELECT 'project_management', tab.table_name, tab.table_comment, col.`COLUMN_NAME`, col.`COLUMN_TYPE`, col.`IS_NULLABLE`, col.`COLUMN_DEFAULT`, col.`COLUMN_COMMENT`
FROM information_schema.`TABLES` tab, information_schema.columns col
WHERE col.table_schema = tab.`TABLE_SCHEMA`
AND col.table_name = tab.`TABLE_NAME`
AND col.table_schema = 'test_project_management'; -- 插入旧表结构
INSERT INTO `new_column_info` (
`table_schema`,
`table_name`,
`table_comment`,
`column_name`,
`column_type`,
`is_nullable`,
`column_default`,
`column_comment`
)
SELECT 'project_management', tab.table_name, tab.table_comment, col.`COLUMN_NAME`, col.`COLUMN_TYPE`, col.`IS_NULLABLE`, col.`COLUMN_DEFAULT`, col.`COLUMN_COMMENT`
FROM information_schema.`TABLES` tab, information_schema.columns col
WHERE col.table_schema = tab.`TABLE_SCHEMA`
AND col.table_name = tab.`TABLE_NAME`
AND col.table_schema = 'oel_project_management'; -- 查看字段名称未变单数据结构变了的
SELECT o.table_schema, o.table_name, o.table_comment,
o.`COLUMN_NAME` AS old_column_name, o.`COLUMN_TYPE` AS old_column_type,
n.`COLUMN_NAME` AS new_column_name, n.`COLUMN_TYPE` AS new_column_type
FROM old_column_info o, new_column_info n
WHERE o.`table_schema` = n.table_schema
AND o.`table_name` = n.table_name
AND o.`column_name` = n.column_name
AND (o.column_type != n.column_type
OR o.`is_nullable` != n.`is_nullable`); -- 查看字段名称未变单数据结构变了的
SELECT o.table_schema, o.table_name, o.table_comment,
o.`COLUMN_NAME` AS old_column_name, o.`COLUMN_TYPE` AS old_column_type,
n.`COLUMN_NAME` AS new_column_name, n.`COLUMN_TYPE` AS new_column_type
FROM old_column_info o, new_column_info n
WHERE o.`table_schema` = n.table_schema
AND o.`table_name` = n.table_name
AND o.`column_name` = n.column_name
AND o.column_type != n.column_type; -- 查询老库里存在但新库里不存在的数据
SELECT
o.table_schema, o.table_name, o.table_comment,
o.`COLUMN_NAME` AS old_column_name, o.`COLUMN_TYPE` AS old_column_type
FROM old_column_info o
WHERE NOT EXISTS(
SELECT 1 FROM new_column_info n
WHERE o.`table_schema` = n.table_schema
AND o.`table_name` = n.table_name
AND o.`column_name` = n.column_name
); -- 查询新库里存在但老库里不存在的数据
SELECT
n.table_schema, n.table_name, n.table_comment,
n.`COLUMN_NAME` AS new_column_name, n.`COLUMN_TYPE` AS new_column_type
FROM new_column_info n
WHERE NOT EXISTS(
SELECT 1 FROM old_column_info o
WHERE o.`table_schema` = n.table_schema
AND o.`table_name` = n.table_name
AND o.`column_name` = n.column_name
);

对比数据库字段不同的sql (mysql版)的更多相关文章

  1. mysql用户授权、数据库权限管理、sql语法详解

    mysql用户授权.数据库权限管理.sql语法详解 —— NiceCui 某个数据库所有的权限 ALL 后面+ PRIVILEGES SQL 某个数据库 特定的权限SQL mysql 授权语法 SQL ...

  2. MySQL 对比数据库表结构

    200 ? "200px" : this.width)!important;} --> 介绍 本章主要介绍怎样对比数据库的表结构的差异,这里主要介绍使用mysqldiff工具 ...

  3. 常用的PHP数据库操作方法(MYSQL版)

    常用的PHP数据库操作方法(MYSQL版) 作者: 字体:[增加 减小] 类型:转载 时间:2011-06-08   最近一直在折腾自己的网站首页,写的大部分PHP脚本都要用到和MYSQL数据库相关的 ...

  4. SQL优化 MySQL版 - B树索引详讲

    SQL优化 MySQL版  - -B树索引详讲 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] 为什么要进行SQL优化呢?很显然,当我们去写sql语句时: 1会发现性能低 2.执行时间太 ...

  5. SQL优化 MySQL版 - 索引分类、创建方式、删除索引、查看索引、SQL性能问题

    SQL优化 MySQL版  - 索引分类.创建方式.删除索引.查看索引.SQL性能问题 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 索引分类 单值索引 单的意思就是单列的值,比如说有 ...

  6. Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)

    day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库:    简称:DataBase ---->DB    数据库即存放数据的仓库, ...

  7. 技术分享|SQL和 NoSQL数据库之间的差异:MySQL(VS)MongoDB

    在当今市场上,存在各种类型的数据库,选择适合你业务类型的数据库对应用的开发和维护有着重要意义.本篇文章,将为大家分享SQL和NoSQL语言之间的区别,同时还将比较这两种类型的数据库,以帮助小伙伴们选择 ...

  8. MySQL 数据库性能优化之SQL优化

    前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 ...

  9. 如何找出MySQL数据库中的低效SQL语句

    面对业务的迅猛发展,DBA的一项重要工作就是及时发现数据库中的低效SQL语句,有的可以立刻着手解决(比如缺少合适的索引),有的需要尽快反馈给开发人员进行修改. MySQL数据库有几个配置选项可以帮助我 ...

随机推荐

  1. CentOS 7.X 关闭SELinux

    1.查看 [root@dev-server ~]# getenforce Disabled [root@dev-server ~]# /usr/sbin/sestatus -v SELinux sta ...

  2. 单元测试——隔离神器:mockito

    mockito,一个让人着迷的单元测试隔离框架.对比了easymock,jmock,jmockito,最终选择了它. 为什么用他 接口语法简洁.自然.写起来像在说话,很舒服. 文档更完整.让学习曲线更 ...

  3. 关于自动化测试框架,所需代码技能,Java篇——参数配置与读取.

    前言: 说在前边.像我这种假期不出去浪,在这里乖乖写文章研究代码的人,绝壁不是因为爱学习,而是自己不知道去哪玩好,而且也不想玩游戏,看电视剧什么的,结果就无聊到看代码了…… 至于如何解读代码,请把它当 ...

  4. WHO ARE YOU?--writeup

    TIPS:广东强网杯线上题 总结知识点:BASE64,ROT13 0x00 Base64 什么是Base64? Base64编码原理 其用途 什么是Base64? Base64是一种基于64个可打印字 ...

  5. 【LeetCode算法题库】Day7:Remove Nth Node From End of List & Valid Parentheses & Merge Two Lists

    [Q19] Given a linked list, remove the n-th node from the end of list and return its head. Example: G ...

  6. Linux速成(一)

    全部转载自http://www.runoob.com/linux/linux-intro.html 一.Linux 简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和 ...

  7. CDN的基本原理和基础架构

    CDN基本原理 最简单的CDN网络由一个DNS服务器和几台缓存服务器组成: ①当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS系统会最终将域名的解析权交给CNAME指向的CDN专用DN ...

  8. Netty 粘包/拆包应用案例及解决方案分析

    熟悉TCP变成的可以知道,无论是客户端还是服务端,但我们读取或者发送消息的时候,都需要考虑TCP底层粘包/拆包机制,下面我们先看一下TCP 粘包/拆包和基础知识,然后模拟一个没有考虑TCP粘包/拆包导 ...

  9. Netty源码分析第1章(Netty启动流程)---->第5节: 绑定端口

    Netty源码分析第一章:Netty启动步骤 第五节:绑定端口 上一小节我们学习了channel注册在selector的步骤, 仅仅做了注册但并没有监听事件, 事件是如何监听的呢? 我们继续跟第一小节 ...

  10. 对PBFT算法的理解

    PBFT论文断断续续读了几遍,每次读或多或少都会有新的理解,结合最近的项目代码,对于共识的原理有了更清晰的认识.虽然之前写过一篇整理PBFT论文的博客,但是当时只是知道了怎么做,却不理解为什么.现在整 ...