比较轻松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 示例:
```pythonimport 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;