【发布时间】:2018-04-08 08:12:52
【问题描述】:
我有一个我无法解决的问题。我正在尝试用相同的数据更新 2 个不同的表,但我总是会出现差异
我有 2 张桌子:users 和 stats
users结构:
id: int(25)
balance: decimal(18,6)
和stats 结构:
date: date
userid: int(25)
balance: decimal(18,6)
我正在使用 innodb 事务来更新表,如下所示:
mysql_query("BEGIN TRANSACTION");
$result1 = mysql_query("INSERT INTO users(id, balance)
VALUES ".$balance."
ON DUPLICATE KEY UPDATE balance = balance + VALUES(balance)");
$result2 = mysql_query("INSERT INTO pubday (date, userid, balance)
VALUES ".$balance."
ON DUPLICATE KEY UPDATE balance=balence+VALUES(balance)");
if($result1 === false || $result2 === false) {
mysql_query("ROLLBACK");
}else{
mysql_query("COMMIT");
}
我每天至少更新表格 500 万次。不管怎样,我总是在users 和stats 的余额之间得到一个微小的差异:
SELECT sum(balance) from stats
和
SELECT balance from users
例如,我在统计数据上得到 balance=302.001731,在用户上得到 balance=302.194501。应该是一样的。
我的问题是这里的错误是什么或者我做错了什么?或者解决这个问题的最佳方法是什么?用相同的数据同时更新 2 个表。
【问题讨论】:
-
您正在使用不受支持的“mysql_”函数并且您关心数据完整性?
-
.... 那和裸字符串连接。注意 SQL 注入!
-
我正在使用 PDO,我只是这样写以使示例简单
标签: php mysql sql normalization data-integrity