我有2个数据库,其中DB1中只有1个表,而DB2中只有2个表。 DB1.table1中的每个记录被拆分并分别存储在DB1.table1和DB @ .table2中。

For example, DB1 has a table1 which looks like

        Student_Name   Id   Address   Attendance   Marks
        ------------   --   -------   ----------   -----
        John            1   90th st       70         90

The records that are transferred from DB1.table1 are stored in DB2.table and DB2.table2 in the following manner

DB2.table 1: Id   Student_Name   Address
             --   ------------   -------
             1     John          90th st


DB2.table 2: Id   Attendance   Marks
             --   ----------   -----
             1     70            90


我想编写一个测试用例,以确保将来自DB1的所有数据复制到DB2。我编写了一些查询来确定是否未将DB1中的记录复制到DB2中。除了找出丢失的记录外,我还想逐列检查每条记录,以确保DB1和DB2中的值相同。

从上面的示例中,我想检查ID = 1是否是DB2.table1 Student_name = DB1.table1 Student_name,DB2.table1 Address = DB1.table1 Address,依此类推。

如果我有1000列怎么办?我应该写一个长脚本来检查每一列吗?否。进行这种测试的最佳方法是什么?我有什么可以利用的工具,还是应该写下脚本?

最佳答案

这将查找Iddb1.table1中不匹配的db2.table1行中的任何db2.table2行。

假定两个表中的列名都相同,并且任何存在于db2.table1db2.table2中的列在db1.table1中都应具有匹配的列名。因此,如果db2.table2具有名为Foo的列,则db1.table1也必须具有名为Foo的列。如果db2.table1具有名为Bar的列,则db1.table1还必须具有名为Bar的列。如果该列在db2中存在,但在db1中不存在,则会出现MySQL错误。

希望这是您想要的!

header("Content-type: text/plain");

// connect with mysqli

// get a list of columns in db2.table1 and db2.table2
$columns = array();
$query = mysqli_query("SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = 'db2' AND table_name IN ('table1', 'table2')");
while ($row = $mysqli_fetch_assoc($query)) {
    $columns[$row["table_name"]][] = "db1.table1.{$row["column_name"]} = db2.{$row["table_name"]}.{$row["column_name"]}";
}

$query = mysqli_query("
    SELECT db1.table1.Id
    FROM
        db1.table1
        LEFT JOIN db2.table1
            ON ". implode(" AND ", $columns["table1"]) ."
        LEFT JOIN db2.table2
            ON ". implode(" AND ", $columns["table2"]) ."
    WHERE
        db2.table1.Id IS NULL
        OR db2.table2.Id IS NULL
");

while (list($id) = mysqli_fetch_row($query)) {
    echo "ID {$id} does not match\n";
}

关于php - 测试2个mysql数据库之间的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12678732/

10-16 20:56