数据库插入随机未使用行 - 使用事务

时间:2014-06-02 20:10:05

标签: php mysql transactions

我正在编写一个应用程序,希望随机为用户分配一个数字,然后输入MySql数据库。有很多人同时使用它,因此我不希望并行使用相互挤压。

我目前的代码如下:

$sql_get = "SELECT * FROM database";
$results = mysql_query($sql_get, $bd);

$list = array();
while($row = mysql_fetch_array($results))
    {
        if ($row['userId']  == "")
        {
            array_push($list, $row['number']);
        }
    }

$rand_nums = array_rand($list , 1); 

$sql_update = "UPDATE database SET userId='". $userId ."' WHERE number=". $rand_nums;
$results = mysql_query($sql_update, $bd);

基本上,它获取空行,将它们放入列表中,选择一个随机空行号并将数据放入行中。当前的问题是get和空行可能同时发生在多个用户身上,并且可能会覆盖同时写入的数据。

如何构建此代码(事务或其他)以确保并发使用没有不良影响?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以在一个查询中完成所有操作:

UPDATE database AS d
SET d.userId = $userId
WHERE d.userId = ''
ORDER BY RAND()
LIMIT 1