+ -
当前位置:首页 → 问答吧 → 怎样避免用户并发操作时获取同一条数据库记录?

怎样避免用户并发操作时获取同一条数据库记录?

时间:2011-12-19

来源:互联网

如题,查询一条is_used=0的记录,取这条记录中code字段的值给用户,再设此记录的is_used=1,怎样防止并发?(避免同一个记录的code值被多个用户获得),好像用mysql的行锁定能解决,但不知道怎么进行行锁定,从网上也没有查到可行的代码,请大家帮忙指点下,代码如下:
SQL code

        $sql = "SELECT * FROM code WHERE is_used=0 ORDER BY Id LIMIT 1";

        $code_row = $GLOBALS['db']->getRow($sql);
        
        if($code_row)
        {
            $sql = "UPDATE code SET is_used=1 WHERE Id='".$code_row['Id']."'";
            $GLOBALS['db']->query($sql);

        }

作者: helloqhq   发布时间: 2011-12-19

数据库资源是共享,不可能限制读取,加锁只是防止重复写
另外 mysql 只提供表级加锁

作者: xuzuning   发布时间: 2011-12-19