MySql 查询数据库中所有表名以及对比分布式库中字段和表的不同

时间:2023-02-20 15:09:27

查询数据库中所有表名
select table_name from information_schema.tables where table_schema='数据库名' and table_type='base table';
查询指定数据库中指定表的所有字段名column_name
select column_name from information_schema.columns where table_schema='数据库名' and table_name='表名';

#查看分布式系统中不同库所有相同表名的comment的不同的表

select * from
(
select TABLE_NAME, TABLE_COMMENT from information_schema.tables where table_schema='test1_1207_bak' and table_type='base table'
) a
INNER JOIN
(
select TABLE_NAME, TABLE_COMMENT from information_schema.tables where table_schema='test2_1207_bak' and table_type='base table'
) b on a.TABLE_NAME=b.TABLE_NAME
where a.TABLE_COMMENT!=b.TABLE_COMMENT;

#查看分布式库中同一表的同一字段类型,字段长度和comment等不同之处

select a.table_name,b.table_name,a.column_name,b.column_name,a.data_type,b.data_type,a.COLUMN_TYPE,b.COLUMN_TYPE,
a.CHARACTER_MAXIMUM_LENGTH,b.CHARACTER_MAXIMUM_LENGTH,a.NUMERIC_PRECISION,b.NUMERIC_PRECISION,
a.NUMERIC_SCALE,b.NUMERIC_SCALE,a.COLUMN_KEY,b.COLUMN_KEY,a.EXTRA,b.EXTRA,a.my_COLUMN_COMMENT,b.my_COLUMN_COMMENT from
(
select
table_name,column_name,data_type,COLUMN_TYPE,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_SCALE,COLUMN_KEY,EXTRA,
CASE
WHEN COLUMN_COMMENT is null THEN ''
ELSE COLUMN_COMMENT
END as my_COLUMN_COMMENT
from information_schema.columns
where table_schema='test2_1207_bak'
) a
INNER JOIN
(
select
table_name,column_name,data_type,COLUMN_TYPE,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_SCALE,COLUMN_KEY,EXTRA,
CASE
WHEN COLUMN_COMMENT is null THEN ''
ELSE COLUMN_COMMENT
END as my_COLUMN_COMMENT
from information_schema.columns
where table_schema='test1_1207_bak'
) b on a.table_name=b.table_name and a.column_name=b.column_name
where a.data_type!=b.data_type or a.my_COLUMN_COMMENT!=b.my_COLUMN_COMMENT;

#查询缺失表语句:

select table_name from information_schema.tables where table_schema='test1_1207_bak' and table_type='base table' and table_name not in(
select table_name from information_schema.tables where table_schema='test2_1207_bak' and table_type='base table'
);

#改用存储过程实现为

# 对比不同库中表区别存储过程
DROP PROCEDURE IF EXISTS p_find_dif_table;
delimiter $$
create procedure p_find_dif_table(database_name1 VARCHAR(100),database_name2 VARCHAR(100))
begin
-- 比较database_name1库表名与database_name2表名不同的表
select table_name as db1_table_name from information_schema.tables where table_schema=database_name1 and table_type='base table'
and table_name not in(
select table_name from information_schema.tables where table_schema=database_name2 and table_type='base table'
);
-- 比较database_name2库表名与database_name1表名不同的表
select table_name as db2_table_name from information_schema.tables where table_schema=database_name2 and table_type='base table'
and table_name not in(
select table_name from information_schema.tables where table_schema=database_name1 and table_type='base table'
);
end;
$$
delimiter ;
-- 调用存储过程
CALL p_find_dif_table('test1_1207_bak','test2_1207_bak');

#查询具体表缺失字段语句:

select column_name from information_schema.columns where table_schema='test2_1207_bak' and table_name='oi_auto'
and column_name not in (
select column_name from information_schema.columns where table_schema='test1_1207_bak' and table_name='oi_auto'
);

# 改用存储过程和游标实现,对比数据库缺失字段

drop TABLE if EXISTS `release_no_field`;
CREATE TABLE `release_no_field` (
`column_name` varchar(255),
`table_name` varchar(255),
`db_name` varchar(255)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='正式库中缺失字段'; drop TABLE if EXISTS `beta_no_field`;
CREATE TABLE `beta_no_field` (
`column_name` varchar(255),
`table_name` varchar(255),
`db_name` varchar(255)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试库中缺失字段'; # 对比不同库中缺失字段存储过程
DROP PROCEDURE IF EXISTS p_find_dif_column;
delimiter $$
create procedure p_find_dif_column(release_db VARCHAR(100),beta_db VARCHAR(100))
begin
DECLARE cur_table VARCHAR(100);
DECLARE no_more_record INT DEFAULT 0;
DECLARE cur_record CURSOR FOR
SELECT TABLE_NAME from information_schema.tables
where table_schema=release_db and table_type='base table' and TABLE_NAME not in('release_no_field','beta_no_field');
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_record = 1;
OPEN cur_record;
FETCH cur_record INTO cur_table; delete from release_no_field;
delete from beta_no_field; WHILE no_more_record != 1 DO
-- 正式库中缺失字段
INSERT INTO release_no_field(column_name,table_name,db_name) select column_name,table_name,release_db from information_schema.columns where table_schema=beta_db and table_name=cur_table
and column_name not in (
select column_name from information_schema.columns where table_schema=release_db and table_name=cur_table
);
-- 测试库中缺失字段
INSERT INTO beta_no_field(column_name,table_name,db_name) select column_name,table_name,beta_db from information_schema.columns where table_schema=release_db and table_name=cur_table
and column_name not in (
select column_name from information_schema.columns where table_schema=beta_db and table_name=cur_table
);
FETCH cur_record INTO cur_table;
END WHILE;
CLOSE cur_record; SELECT * from release_no_field;
SELECT * from beta_no_field;
end;
$$
delimiter ;

对比不同库同一表同一字段类型不一致

SELECT
hosp_release.table_name AS table_name,
hosp_release.column_name AS column_name,
hosp_release.column_type AS hosp_release_column_type,
hosp_beta.column_type AS hosp_beta_column_type
FROM
(
select table_name,column_name,column_type from information_schema.columns where table_schema='hosp2' and table_name in (
select TABLE_NAME from information_schema.tables where table_schema='hosp2' and table_type='base table'
)) hosp_release ,
(
select table_name,column_name,column_type from information_schema.columns where table_schema='hosp_shunde_0226' and table_name in (
select TABLE_NAME from information_schema.tables where table_schema='hosp_shunde_0226' and table_type='base table'
)) hosp_beta
WHERE hosp_release.table_name=hosp_beta.table_name and hosp_release.column_name=hosp_beta.column_name and hosp_release.column_type!=hosp_beta.column_type

MySql 查询数据库中所有表名以及对比分布式库中字段和表的不同的更多相关文章

  1. Mysql查询数据库 整理

    一.       查询数据: 查询所有列:SELECT * FROM student; 查询指定列:SELECT id,NAME,gender FROM student; 格式:select字段名, ...

  2. 在这个应用中,我使用了 MQ 来处理异步流程、Redis 缓存热点数据、MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ、MySQL 持久化的数据也会存在于一个分布式文件系统中,他们之间的调用也是需要用 RPC 来完成数据交互的。

    在这个应用中,我使用了 MQ 来处理异步流程.Redis 缓存热点数据.MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ.MySQ ...

  3. bpexpdate – 更改映像目录库中备份的截止日期以及介质目录库中介质的截止日期nbu

    1.根据bpdbjobs查找backupidbpdbjobs -jobid xxx -all_columns|grep backupid 2.查看数据保留时间[root@backup]# bpimag ...

  4. MySql 查询数据库中所有表名

    查询数据库中所有表名select table_name from information_schema.tables where table_schema='csdb' and table_type= ...

  5. MySQL 查询 数据库有多少表 表名是哪些

    1.查询sjcenter数据库里开头为sj_demo和sj_onlyinv的所有表的总条数 select sum(table_rows) from (select table_name,table_r ...

  6. mysql查询数据库中包含某字段(列名)的所有表

    SELECT TABLE_NAME '表名',TABLE_SCHEMA '数据库名',ORDINAL_POSITION '顺序',COLUMN_NAME '字段',DATA_TYPE '类型' ,CH ...

  7. mysql 查询数据库或某张表有多大(字节)

    转载:https://www.cnblogs.com/diandiandidi/p/5582309.html 1.要查询表所占的容量,就是把表的数据和索引加起来就可以了 select sum(DATA ...

  8. mysql查询数据库大小和表

    每个mysql都有一个库information_schema,里面有一张表TABLES存储了所有数据库表的信息,因此,可以从这张表中查看数据库大小和表大小 查询数据库大小 ,),'GB') as da ...

  9. MySQL查询数据库中表名或字段名

    查询数据库中所有表名 select table_name from information_schema.tables where table_schema='csdb' and table_type ...

随机推荐

  1. 第九章伪代码编程过程 The PseudoCode Programming Process

    目录: 1.创建类和子程序的步骤概述 2.伪代码 3.通过伪代码编程过程创建子程序 4.伪代码编程过程的替代方案 一.创建类和子程序的步骤概述 (1)创建一个类的步骤 1.创建类的总体设计 2.创建类 ...

  2. C语言的执行

    在ANSIC 的任何一种实现中,有两种不同的环境 翻译环境:将源代码转换为可执行的机器代码 执行环境:用于执行代码 这两种环境可以运行于同一个机器上,也可以运行于不同的机器上 例如交叉编译器:在一台机 ...

  3. Yacc 与 Lex 快速入门(词法分析和语法分析)

    我们知道,高级语言,一般的如c,Java等是不能直接运行的,它们需要经过编译成机器认识的语言.即编译器的工作. 编译器工作流程:词法分析.语法分析.语义分析.IR(中间代码,intermediate ...

  4. jsp 基础知识之指令元素

    由于考研和结业的事情,这里荒废了许久,而如今重新捡起来,是因为带到公司的碳素笔没有油了......    jsp的指令元素:通常以<%@开始,以%>结尾. jsp主要包括三种指令元素:pa ...

  5. CF833D Red-Black Cobweb 点分治、树状数组

    传送门 统计所有路径的边权乘积的乘积,不难想到点分治求解. 边权颜色比例在\([\frac{1}{2},2]\)之间,等价于\(2B \geq R , 2R \geq B\)(\(R,B\)表示红色和 ...

  6. pyhanlp 停用词与用户自定义词典功能详解

    hanlp的词典模式 之前我们看了hanlp的词性标注,现在我们就要使用自定义词典与停用词功能了,首先关于HanLP的词性标注方式具体请看HanLP词性标注集. 其核心词典形式如下: 自定义词典 自定 ...

  7. tp 生成静态页

    $this->fetch()返回的是html 可以直接写入到HTML文件内生成静态页

  8. Android——Intent动作汇总(转)

    String ADD_SHORTCUT_ACTION 动作:在系统中添加一个快捷方式.. "android.intent.action.ADD_SHORTCUT" String A ...

  9. Re:从零开始的Spring Security Oauth2(一)

    前言 今天来聊聊一个接口对接的场景,A厂家有一套HTTP接口需要提供给B厂家使用,由于是外网环境,所以需要有一套安全机制保障,这个时候oauth2就可以作为一个方案. 关于oauth2,其实是一个规范 ...

  10. Proxool Provider unable to load JAXP configurator file&colon; proxoolconf&period;xml

    Proxool Provider unable to load JAXP configurator file: proxoolconf.xml log4j:WARN No appenders coul ...