繁体   English   中英

比较InnoDb和MyIsam MySql表是否相等

[英]Comparing InnoDb and MyIsam MySql Tables for Equality

我试图比较来自两个不同数据库的两个MySql表,一个使用MyIsam引擎,另一个使用InnoDb引擎。

我需要能够快速确定表是否存储相同的值。 我通过使用MD5哈希比较开始,但是失败了。 我认为这是因为数据库引擎不同。

有人对我如何比较两个表是否相等有任何建议吗?

注意

这是一个用C#.NET编写的应用程序,因此我更喜欢C#实现,而不是MySql引擎实现。 通常,每个表始终有210列,且介于0到100行之间。

当然不是大表的解决方案,自动增量是不同的。 您可以使用具有一定出现次数的cron作业来自动执行此操作,或者如果您说在cron作业看到,清除并开始的某个表中放入一个值,则可以自动执行此操作。

CREATE TABLE charlie1
(   billybob INT NOT NULL,
    birthdate DATETIME NOT NULL,
    funny_num FLOAT NOT NULL
)ENGINE=INNODB;

INSERT INTO charlie1 (billybob,birthdate,funny_num) VALUES (1,'2006-01-02',28832.123);
INSERT INTO charlie1 (billybob,birthdate,funny_num) VALUES (2,'2004-09-02',18832.888);
INSERT INTO charlie1 (billybob,birthdate,funny_num) VALUES (3,'2006-07-03',28332.123);
INSERT INTO charlie1 (billybob,birthdate,funny_num) VALUES (4,'2006-01-02',28852.777);


SELECT billybob,birthdate,funny_num
FROM charlie1
ORDER BY billybob
INTO OUTFILE '/tmp/charlie1.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

CREATE TABLE charlie2
(   billybob INT NOT NULL,
    birthdate DATETIME NOT NULL,
    funny_num FLOAT NOT NULL
)ENGINE=MYISAM;

INSERT INTO charlie2 (billybob,birthdate,funny_num) VALUES (1,'2006-01-02',28832.123);
INSERT INTO charlie2 (billybob,birthdate,funny_num) VALUES (2,'2004-09-02',18832.888);
INSERT INTO charlie2 (billybob,birthdate,funny_num) VALUES (3,'2006-07-03',28332.123);
INSERT INTO charlie2 (billybob,birthdate,funny_num) VALUES (4,'2006-01-02',28852.777);


SELECT billybob,birthdate,funny_num
FROM charlie2
ORDER BY billybob
INTO OUTFILE '/tmp/charlie2.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

i changed data in the file to show diff picks it up:

root@hp:/tmp# diff /tmp/charlie1.csv /tmp/charlie2.csv
2c2
< "2","2004-09-02 00:00:00","18832.9"
---
> "2","2004-09-02 00:00:00","18832.8"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM