2013-05-20 149 views
0

我想比較兩個獨立數據庫中的兩個MySql表,一個使用MyIsam引擎,另一個使用InnoDb引擎。比較InnoDb和MyIsam MySql表的平等

我需要能夠快速確定表是否存儲相同的值。我通過使用MD5哈希比較開始了這一工作,但失敗了;我認爲它是因爲數據庫引擎不同。

有沒有人有任何意見,我怎麼可以比較兩個表的平等?

這是正在寫在C#.NET應用程序,所以我寧願一個C#實現,而不是一個MySQL引擎的實現。一般來說,每個表總共有210列和0到100行之間的任何地方。

回答

1

當然不是大表的解決方案,而是自動增量不同。 您可以使用某個特定事件的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: 

[email protected]:/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" 
+0

德魯,這是一個很好的答案,但我不認爲我足夠具體:我在WPF C#.NET中編寫此應用程序。如果可能的話,我寧願如果答案不太依賴於數據庫引擎。有沒有辦法做到這一點,而不是逐行,在.NET中通過值比較值? – kformeck

+0

改變這個問題,我會再去看看它。通常有多少排 – Drew

+0

德魯,我編輯了問題,請讓我知道如果問題需要更多的澄清。 – kformeck