我有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列怎么办?我应该写一个长脚本来检查每一列吗?否。进行这种测试的最佳方法是什么?我有什么可以利用的工具,还是应该写下脚本?
最佳答案
这将查找Id
和db1.table1
中不匹配的db2.table1
行中的任何db2.table2
行。
假定两个表中的列名都相同,并且任何存在于db2.table1
或db2.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/