【问题标题】:Comparing InnoDb and MyIsam MySql Tables for Equality比较 InnoDb 和 MyIsam MySql 表的相等性
【发布时间】:2013-05-20 14:49:07
【问题描述】:

我正在尝试比较来自两个独立数据库的两个 MySql 表,一个使用 MyIsam 引擎,另一个使用 InnoDb 引擎。

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

关于如何比较这两个表是否相等,有人有什么建议吗?

注意

这是一个用 C#.NET 编写的应用程序,所以我更喜欢 C# 实现,而不是 MySql 引擎实现。通常,每个表总是有 210 列和 0 到 100 行之间的任意位置。

【问题讨论】:

    标签: c# mysql .net sql database


    【解决方案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:
    
    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"
    

    【讨论】:

    • Drew,这是一个很好的答案,但我认为我不够具体:我正在用 WPF C#.NET 编写这个应用程序。如果可能的话,我希望答案不太依赖数据库引擎。除了在 .NET 中逐行逐值比较之外,还有其他方法吗?
    • chg 这个问题,我会再试一次。通常有多少行
    • Drew,我编辑了问题,如果问题需要更多说明,请告诉我。
    猜你喜欢
    • 2011-04-17
    • 2012-05-15
    • 2012-01-13
    • 2012-04-14
    • 2012-03-01
    • 2011-05-14
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    相关资源
    最近更新 更多