数据库中两张表结构的比对

6 篇文章 0 订阅

比对lc和lp表结构(字段,字段个数,字段类型,字段长度,字段顺序)

Oracle数据库

1. 对比两张表的结构

字段个数:查询user_tab_columns使用COUNT(*)返回行数

SELECT COUNT(*)
FROM user_tab_columns
WHERE table_name = 'lc';
  • 这里的COUNT(*)返回的是列的行数,为什么不是数据的行数

在 Oracle 数据库中,有一些系统表,用来存放一些元数据信息,比如系统中的所有表、表的字段名、
数据类型等信息。其中,user_tab_columns 就是一个系统表,它包含了所有用户表(即用户自己创建 的表)的列信息。 对于
SELECT COUNT(*) FROM user_tab_columns WHERE table_name = 'lc' 这个
SQL 语句而言, 它是应用在 user_tab_columns 这个系统表上的,它的实际作用是用来查询表 lc 中有多少个字段
(即列)。

  • 让我们来分析一下这个 SQL 语句的每个部分

SELECT COUNT() 表示使用 COUNT 函数来对查询的结果进行计数。COUNT 函数是一个聚合函数,
它用来计算符合查询条件的数据行数。在这个 SQL 语句中,我们使用 COUNT(
),即统计所有符合 条件的行数。 FROM
user_tab_columns 表示需要从 user_tab_columns 这个系统表中进行查询。 WHERE table_name
= ‘lc’ 表示限制查询结果中只包含表名为 lc 的表的列信息。 user_tab_columns 这个系统表中包含了所有用户表的列信息,为了获取 lc 表的列信息,我们需要 使用 WHERE 子句来进行过滤。 因此,这个 SQL
语句的实际效果是查询 user_tab_columns 这个系统表中所有属于 lc 表的列信息, 然后统计这些信息的数量,从而获取 lc
表的列数(即字段数)。

可以通过下面这条sql语句来查询出每张表的表结构(字段,字段类型,字段长度,字段顺序)

SELECT
		column_id,column_name,
		data_type,
		nullable,
		data_length,
		data_precision,
		data_scale 
	FROM
		user_tab_columns 
	WHERE
		table_name = 'lc' 
	ORDER BY
		column_id;

user_tab_columns

是 Oracle 数据库中的一个系统视图,它包含了当前用户(schema)下所有表的列信息,每一行表示一张表
中的一列。
该视图中的列信息包括:列名、数据类型、空值约束、数据长度、数据精度、数据范围等。

视图主要的列:

TABLE_NAME:列所属的表名。
COLUMN_NAME :列的名称。
DATA_TYPE:列的数据类型。
DATA_LENGTH:列的字节数。
DATA_PRECISION:数字型列的精度。对于非数字型列则为空。 DATA_SCALE:数字型列的小 数位数。对于非数字型列则为空。
NULLABLE:列是否允许为空值。该列返回了三种值:Y,表示可空; N,表示不可空;以及 (空),表示该列未知是否可空。

2. 因为对比时我们还要对比字段顺序

在user_tab_columns 中还有一个column_id 字段,该字段表示列的顺序。 通过查询该视图中的 column_id
字段可以得出表中每列的顺序,在通过order by 进行了升序排序

这样我们便得到了按字段顺序排序表结构

由于使用的是公司的数据库,最后的结果我就不展示了

然后再使用文件对比的工具对比就可以了
这类工具有很多,我使用的 Beyond Compare,有需要的去下载就可以了
在这里插入图片描述
可以清晰的看到差异
在这里插入图片描述

题主学习记录,大家多多包涵,有问题评论区下交流。

在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kboy01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值