比较轻松MySQL双表对比,数据一目了然(mysql 两张表比对)

MySQL 双表对比,数据一目了然

在 MySQL 的日常使用中,对比两个表格的数据是很常见的任务,但是手动比较数据极为麻烦,容易出错,浪费时间。因此,使用编程工具自动对比两个表的数据将是一个更好的选择。

MySQL 数据库自带了一些实用的工具,如 mysqldiff 和 mysqldbcompare 等,可以帮助我们快速比较两个表格的数据差异。这些工具以命令行方式运行,可以在 Linux,Mac,Windows 操作系统中使用。

mysqldiff

在 MySQL 5.1 版本之后的 mysql-utils 包里面包含了 mysqldiff 工具。在命令行中,只需输入以下命令即可运行。

“`bash

$ mysqldiff –server1=user:password@host:port –server2=user:password@host:port dbname:table1 dbname:table2


其中,`--server1`和`--server2`是连接两个数据库实例的参数,`user` 是连接数据库的用户名,`password` 是密码,`host` 是主机名,`port` 是端口号;`dbname:table1` 和 `dbname:table2` 是需要比较的两个表格,`dbname` 是数据库名,`table1` 和 `table2` 是表格名。

执行上述命令后,会输出两个表所有的不同之处,如下所示:

# server1 dbname:table1

# server2 dbname:table2

#

# ————————————————–

# Columns difference in table `table1`

# ————————————————–

#

# DB Differences:

#

#

#

# ————————————————–

# Columns difference in table `table2`

# ————————————————–

#

# DB Differences:

#

#

# ————————- Mon Dec 2 07:17:55 2019

# Definitions for table `table1`

# ————————- ———————————————————-

# COLUMN_NAME | Column attributes

# ————————- ———————————————————-

# 111 | Missing

# TIME | Type is TINYINT instead of TIME.

# ————————- ———————————————————-

#

# ————————- Mon Dec 2 07:17:55 2019

# Definitions for table `table2`

# ————————- ———————————————————-

# COLUMN_NAME | Column attributes

# ————————- ———————————————————-

# id | Missing

# TIME | Type is TINYINT instead of TIME.

# ————————- ———————————————————-


mysqlcompare

mysqldiff 可以方便快速的帮助我们发现两个表的差异之处,但是它只会输出表的结构和数据之间的不同之处。如果你需要更详细的比较信息,就需要使用 mysqldbcompare 工具了。

mysqldbcompare 是一个比较数据库之间的差异的工具。它可以比较两个数据库之间的表格以及表格之间的差异。使用它可以快速地查找出两个数据库的不同,以及表格和表格之间的区别。

使用 mysqldbcompare 的方法和 mysqldiff 非常相似,只需要在命令行中输入以下命令:

$ mysqldbcompare –server1=user:password@host:port –server2=user:password@host:port dbname1 dbname2


其中,`--server1`和`--server2`是连接两个数据库实例的参数,`user` 是连接数据库的用户名,`password` 是密码,`host` 是主机名,`port` 是端口号;`dbname1` 和 `dbname2` 是需要比较的两个数据库名。

得到的比较结果可以以 HTML 或 UltraCompare 的方式呈现出来。如下是一个 html 格式的示例:

![](https://cdn.mathieudutour.me/wp-content/uploads/2014/09/mysql-diff-tool-mysqldbcompare-html.png)

总结

比较两个表格之间的区别是 MySQL 开发人员日常工作中必不可少的一步。而使用 mysqldiff 和 mysqldbcompare 这样的工具来自动比对两个表格的数据会使这个任务变得更加轻松。

代码示例:比较两个表中的数据

在本篇文章中,我们使用了 mysqldiff 和 mysqldbcompare 来比较 MySQL 数据库中两个表的结构与数据的差异。下面是 mysqldiff 工具的 Python 和 SQL 实现。

Python 示例:

```python
import MySQLdb
import MySQLdb.cursors

def compare_db_table_data(server1, server2, database, table1, table2):
# Connection to server 1
conn1 = MySQLdb.connect(**server1, database=database)
cursor1 = conn1.cursor(cursorclass=MySQLdb.cursors.DictCursor)
# Connection to server 2
conn2 = MySQLdb.connect(**server2, database=database)
cursor2 = conn2.cursor(cursorclass=MySQLdb.cursors.DictCursor)

# Execute the query on both servers
cursor1.execute("SELECT * FROM %s ORDER BY %s" % (table1, table2))
cursor2.execute("SELECT * FROM %s ORDER BY %s" % (table2, table2))

# Compare the rows
difference = False
while True:
row1 = cursor1.fetchone()
row2 = cursor2.fetchone()

if row1 == None and row2 == None:
break
if row1 != row2:
print(row1)
print(row2)
difference = True
conn1.close()
conn2.close()
return difference

SQL 示例:

“`sql

SELECT *

FROM

(

SELECT

t1.*,

‘source’ AS `db`

FROM db1.table t1

UNION ALL

SELECT

t2.*,

‘destination’ AS `db`

FROM db2.table t2

) tmp

GROUP BY id

HAVING COUNT(*) = 1

ORDER BY id;


      

数据运维技术 » 比较轻松MySQL双表对比,数据一目了然(mysql 两张表比对)