MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS应用软件之一。mysql官网下载就在本站
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。
近期在工作中做数据库部署,遇到很多奇奇怪怪的问题,导致数据表数据出现了许多问题。
在数据迁移中,我们经常需要比较两个表,以便在一个表中标志另一个表中没有相应记录的记录。
例如,我们有一个新的数据库,其架构与旧数据库不同。我们的任务是将所有数据从旧数据库迁移到新数据库,并验证数据是否正确迁移。
要检查数据,我们必须比较两个表,一个在新数据库中,一个在旧数据库中,标记出不匹配的记录。
本篇知识点
学习如何比较两个表以找到不匹配的记录。
数据表对比
假设有两个表:t1 和 t2。
使用以下步骤比较两个表,并确定不匹配的记录:
就让小编来告诉你mysql官网下载,找出表中差异数据的方法图二
首先,使用 UNION 语句来组合两个表中的行,仅包含需要比较的列,返回的结果集用于比较。
SELECT t1.pk,t1.c1 FROM t1UNION ALLSELECT t2.pk,t2.c1 FROM t2
第二步,根据需要比较的主键和列分组记录。
如果需要比较的列中的值相同,则 COUNT(*) 返回 2,否则 COUNT(*) 返回 1。
请看下面的查询语句:
SELECT pk,c1FROM( SELECT t1.pk,t1.c1 FROM t1 UNION ALL SELECT t2.pk,t2.c1 FROM t2) tGROUP BY pk,c1HAVING COUNT(*) = 1ORDER BY pk
如果比较中涉及的列中的值相同,则不返回任何行。
就让小编来告诉你mysql官网下载,找出表中差异数据的方法图三
MySQL 比较两个表的例子
我们来看一个模拟上述步骤的例子。
首先,创建具有相似结构的 2 个表:
USE testdb;CREATE TABLE t1(id int auto_increment primary key,title varchar(255) );CREATE TABLE t2(id int auto_increment primary key,title varchar(255),note varchar(255));
其次,在 t1 和 t2 表中插入一些数据:
INSERT INTO t1 (title) VALUES ('row 1'),('row 2'),('row 3');INSERT INTO t2 (title,note) SELECT title,'data migration' FROM t1;
第三,比较两个表的id和title列的值:
SELECT id,titleFROM (SELECT id,title FROM t1 UNION ALL SELECT id,title FROM t2) tblGROUP BY id,titleHAVING count(*) = 1ORDER BY id;
没有行返回,因为没有不匹配的记录。
第四,在t2表中插入一行:
INSERT INTO t2 (title,note) VALUES ('new row 4','new');
第五步,执行查询以再次比较两个表中的title列的值。新行是不匹配的行将会返回。
mysql> SELECT id,titleFROM (SELECT id,title FROM t1 UNION ALL SELECT id,title FROM t2) tblGROUP BY id,titleHAVING count(*) = 1ORDER BY id;+----+-----------+/ id / title /+----+-----------+/ 4 / new row 4 /+----+-----------+1 row in set
结语
到此为止,我们是数据比对也就结束了,希望大家可以动手实际练习一下,这样才能学习到里面的真正实质知识点。mysql官网下载一定要记得在本站哦