Yii怎么对数据表进行锁定?

我的数据表是使用InnoDB的,现在的情况如下:

表product,里面有很多数据,首先,我把这些数据取出来,然后每条记录都要对远程的web service进行数据请求,根据返回的信息对该记录进行修改,然后再写回到数据表里面。

现在为了防止在对远程web service进行调用的过程中,又产生上面的动作,导致第二次读出来的数据是脏数据,所以想对数据表进行锁定。代码如下,




public function actionRequestdate()

{

    $products = Product::model()->findAll();

    foreach($products as $key=>$product)

    {

        $result = "http://www.example.com/auth?r=".$product->id;//这里是用web service进行调用

        sleep(100);//因为远程调用是需要时间来进行通信和给web service处理数据的,所以这里让线程sleep一下

        $result = json_decode($result);

        if(1 == $result['status'])

        {

            $product->status = 1;

            $product->save();

        }

    }

}



就是说,用户有两个请求,分别为请求A和请求B,都是调用actionRequestdata()这个方法,但它们请求有时间差。

在请求A执行foreach的时候,请求B来了。这时候由于请求A还没有执行完,所以请求B中的$products数据就有可能存在脏数据的情况。

请问如何处理这样的情况,使请求B在执行它的foreach的时候,可以保证$products的数据是最新的。

是要使用锁表来完成这样的事情吗?那这样的话,代码应该怎么写才对呢?

还是有其它更加简单实用的方法呢?

希望大家指点指点。

谢谢~

都快一天了,哪位大哥可以帮一下我啊 T_T

请google "悲观锁" "乐观锁" 了解你现在应用适合使用拿种