【发布时间】:2012-02-17 06:17:42
【问题描述】:
我有一个简单的电力系统,用户可以互相借用:
mysql_query("INSERT INTO power (sender, receiver, amount)
VALUES ('$sender', '$receiver', '$amount')");
mysql_query("UPDATE users SET power=power-$amount WHERE user_id='$sender'");
mysql_query("UPDATE users SET power=power+$amount WHERE user_id='$receiver'");
在运行上述查询集之前,我会通过 SELECT 查询检查发件人是否有足够的信用额度进行转账。
问题1:我认为,最好将这四个查询全部放入Transaction;因为 InnoDB ACID 将保证更安全的性能。这样做的最佳交易是什么?
问题 2: 电源是 unsigned int。如果有任何机会(甚至不太可能),用户没有足够的信用power-$amount 将不会设置为 0;相反,它将循环通过 int() 的最大值,即 4294967295。这意味着将授予用户几乎无限的权力(信用)。
【问题讨论】:
标签: php mysql sql transactions innodb