获取两个sql文件的区别

时间:2013-03-27 13:43:10

标签: mysql database diff mysqldump dump

我想获得两个sql转储的区别。我必须在新文件中保存差异。差异应该是合法的查询!例如,如果我有一个包含以下内容的文件,

CREATE TABLE IF NOT EXISTS `newtable` (
  `name` int(11) NOT NULL AUTO_INCREMENT,
  `id` int(11) NOT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

INSERT INTO `newtable` (`name`, `id`) VALUES
(1, 2);

和第二个文件,

CREATE TABLE IF NOT EXISTS `newtable` (
  `name` int(11) NOT NULL AUTO_INCREMENT,
  `id` int(11) NOT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

INSERT INTO `newtable` (`name`, `id`) VALUES
(1, 2),
(4, 5);

然后我会得到,

INSERT INTO `newtable` (`name`, `id`) VALUES
(1, 2),
(4, 5);

那怎么可能呢?

1 个答案:

答案 0 :(得分:1)

这是一种方法,假设两个表都没有重复:

select (case when max(src) = 1 then 'DELETED'
              else 'ADDED'
         end) as what, name, id
from ((select 1 as src, name, id
       from newtable1 t
      ) union all
      (select 2 as src, name, id
       from newtable2 t
      )
     ) t
group by name, id
having count(*) = 1

返回从一个表添加或删除行到另一个表的行。您可以使用insert语句将这些结果插入另一个表 - 或者任何地方。