rat 2011-07-11 17:40:15 7765次浏览 4条回复 1 0 0

除了用CDbConnection::createCommand硬写,还有别的办法吗?

  • 回复于 2011-07-11 19:45 举报

    可以使用AR更新啊!

  • 回复于 2011-07-11 22:42 举报

    不是一般的AR object读写,而是需要加锁的,保证对某条记录的read-modify-write是原子的,而且最好是row level lock,而不是table level lock。 从SQL语句来说,安全高效的方法大致如下:
    BEGIN TRANSACTION;
    SELECT ... FOR UPDATE;
    -- do the update job here
    ...
    COMMIT;
    无法完全用Yii的AR已有的方法来实现,需要自己构造CDbCommand.

  • 回复于 2013-01-03 20:27 举报

    终于完成了新手任务,进来问跟这个同样的问题。
    现在有人解决了楼主这个问题吗?

    我这有个项目,用的是AR,需要加 行锁,但是找不到使用 FOR UPDATE 的选项啊。

    不知道的请看有关 mysql 行锁 和 表锁 的相关文章:
    http://hchmsguo.iteye.com/blog/454214

  • 回复于 2013-01-04 15:23 举报

    好吧,自问自答。找到答案了。

    使用findBySql,然后自定义 select ... for update 即可。

您需要登录后才可以回复。登录 | 立即注册