简体   繁体   English

比较InnoDb和MyIsam MySql表是否相等

[英]Comparing InnoDb and MyIsam MySql Tables for Equality

I am trying to compare two MySql tables from two separate databases, one uses a MyIsam engine and the other uses an InnoDb engine. 我试图比较来自两个不同数据库的两个MySql表,一个使用MyIsam引擎,另一个使用InnoDb引擎。

I need to be able to quickly determine whether the tables store identical values or not. 我需要能够快速确定表是否存储相同的值。 I started this by using an MD5 hash comparison but that failed; 我通过使用MD5哈希比较开始,但是失败了。 I think its because the db engines are different. 我认为这是因为数据库引擎不同。

Does anyone have any advice as to how I could compare the two tables for equality? 有人对我如何比较两个表是否相等有任何建议吗?

NOTE : 注意

This is an application that is being written in C#.NET, so I would prefer a C# implementation, not a MySql engine implementation. 这是一个用C#.NET编写的应用程序,因此我更喜欢C#实现,而不是MySql引擎实现。 In general, there are always 210 columns and anywhere between 0 and 100 rows per table. 通常,每个表始终有210列,且介于0到100行之间。

not a solution for huge tables of course, and auto increments that are different. 当然不是大表的解决方案,自动增量是不同的。 you could automate this with a cron job with a certain occurrence or if you say plop a value in a certain table that the cron job sees, clears, and begins it. 您可以使用具有一定出现次数的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