如何对比两个数据库差异

如何对比两个数据库差异,第1张

构建两个临时表,将两个数据结构信息导入。

create Table #t1

(

ID Int Identity(1,1) Not Null Primary Key,

tablename nvarchar(50) NULL,

columnName nvarchar(50) NULL,

columnIndex int null,

columnType nvarchar(50) NULL

)

use 数据库1

insert into #t1

create Table #t2

(

ID Int Identity(1,1) Not Null Primary Key,

tablename nvarchar(50) NULL,

columnName nvarchar(50) NULL,

columnIndex int null,

columnType nvarchar(50) NULL

)

//开始比较

use 数据库2

insert into #t2

SELECT

SO.name as '表名',

SC.name as '表列名',

SC.colid as '索引',

ST.name as '类型'

FROM

sysobjects SO, -- 对象表

syscolumns SC, -- 列名表

systypes ST -- 数据类型表

WHERE

SO.id = SC.id

AND SO.xtype = 'U'-- 类型U表示表,V表示视图

AND SO.status >= 0 --加一个条件:SO.status >= 0,否则会将系统的临时表显示出来

AND SC.xtype = ST.xusertype

ORDER BY

SO.name, SC.colorder

go

//查询出 在t1 里有, t2 里没有的字段,查询列出来。

select * from

(

select tablename,columnName,columnType from #t1 where tablename like '%EMS_%'

EXCEPT

select tablename,columnName,columnType from #t2 where tablename like '%EMS_%'

) as c

order by tablename

比较两个数据库中表和字段的差异

-- 比较两个数据库中表的差异

-- u表,p存储过程,v视图

-- INTFSIMSNEW新库,INTFSIMS旧库

SELECT NTABLE = A.NAME, OTABLE = B.NAME

FROM INTFSIMSNEW..SYSOBJECTS A

LEFT JOIN INTFSIMS..SYSOBJECTS B

ON A.NAME = B.NAME

WHERE ISNULL(B.NAME, '') = ''

AND A.XTYPE = 'U'

UNION ALL

SELECT NTABLE = B.NAME, OTABLE = A.NAME

FROM INTFSIMS..SYSOBJECTS A

LEFT JOIN INTFSIMSNEW..SYSOBJECTS B

ON A.NAME = B.NAME

WHERE ISNULL(B.NAME, '') = ''

AND A.XTYPE = 'U'

ORDER BY 1, 2

-- 比较两个数据库中每个表字段的差异

SELECT

表名A = CASE WHEN ISNULL(A.TABLENAME, '') <>'' THEN A.TABLENAME ELSE B.TABLENAME END,

字段名A = A.FIELDNAME,

字段名B = B.FIELDNAME,

顺序= A.FIELDSNO,

说明= CASE WHEN A.FIELDTYPE <>B.FIELDTYPE THEN '类型: ' + A.FIELDTYPE + '-->' + B.FIELDTYPE

WHEN A.FIELDSNO <>B.FIELDSNO THEN '顺序: ' + str(A.FIELDSNO) + '-->' + str(B.FIELDSNO)

WHEN A.LENGTH <>B.LENGTH THEN '长度: ' + str(A.LENGTH) + '-->' + str(B.LENGTH)

WHEN A.LENSEC <>B.LENSEC THEN '小数位: ' + str(A.LENSEC) + '-->' + str(B.LENSEC)

WHEN A.ALLOWNULL <>B.ALLOWNULL THEN '允许空值: ' + str(A.ALLOWNULL) + '-->' + str(B.ALLOWNULL)

END

FROM (SELECT

TABLENAME = B.NAME,

FIELDNAME = A.NAME,

FIELDSNO = A.COLID,

FIELDTYPE = C.NAME,

LENGTH = A.LENGTH,

LENSEC = A.XSCALE,

ALLOWNULL = A.ISNULLABLE

FROM INTFSIMSNEW..SYSCOLUMNS A

LEFT JOIN INTFSIMSNEW..SYSOBJECTS B

ON A.ID = B.ID

LEFT JOIN INTFSIMSNEW..SYSTYPES C

ON A.XUSERTYPE = C.XUSERTYPE

WHERE B.XTYPE = 'U') A

FULL JOIN (SELECT

TABLENAME = B.NAME,

FIELDNAME = A.NAME,

FIELDSNO = A.COLID,

FIELDTYPE = C.NAME,

LENGTH = A.LENGTH,

LENSEC = A.XSCALE,

ALLOWNULL = A.ISNULLABLE

FROM INTFSIMS..SYSCOLUMNS A

LEFT JOIN INTFSIMS..SYSOBJECTS B

ON A.ID = B.ID

LEFT JOIN INTFSIMS..SYSTYPES C

ON A.XUSERTYPE = C.XUSERTYPE

WHERE B.XTYPE = 'U') B

ON A.TABLENAME = B.TABLENAME

AND A.FIELDNAME = B.FIELDNAME

WHERE ISNULL(A.TABLENAME, '') = ''

OR ISNULL(B.TABLENAME, '') = ''

OR A.FIELDTYPE <>B.FIELDTYPE

OR A.FIELDSNO <>B.FIELDSNO

OR A.LENGTH <>B.LENGTH

OR A.LENSEC <>B.LENSEC

OR A.ALLOWNULL <>B.ALLOWNULL

ORDER by 1, 4

先把每个库的表结构导出到文件,然后比较这两个文件。

mysqldump --skip-comments --skip-extended-insert -u root -p database1>file1.sql

mysqldump --skip-comments --skip-extended-insert -u root -p database2>file2.sql

diff file1.sql file2.sql

其实还有一些比较工具,推荐一个

mysql-comparison-tools

1、数据bai存储方式不同。

关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。

与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。

2、扩展方式不同。

SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。

要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。

因为数据存储在关系表中, *** 作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来客服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。而NoSQL数据库是横向扩展的。

而非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。

3、对事务性的支持不同。

如果数据 *** 作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。

虽然NoSQL数据库也可以使用事务 *** 作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在 *** 作的扩展性和大数据量处理方面。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6666034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存