如何防止mysql数据库中的activerecord写冲突?

时间:2013-09-26 08:01:07

标签: mysql activerecord yii

我们使用activerecord来操纵数据库中的数据。但是我们遇到了写冲突的麻烦。这看起来像是多线程编程中的读/写冲突。在数据库的情况下,我不知道是否应该像多线程编程中的锁内存访问一样锁定数据库。

更具体地说,是以下情况:

1程序A使用从数据库读取的数据创建一个activerecord,然后对其进行修改。

2程序B创建一个activerecord,正好指的是数据库中的同一行。

3 A将数据写回db。

4 B也将数据写入db。

出现了冲突。

我们使用yii框架构建我们的网站,并使用activerecord访问MySql数据库。

我们应该在逻辑中执行所有操作还是使用某些数据库实用程序?

1 个答案:

答案 0 :(得分:1)

将所有内容放入事务中并在选择行时使用select for update应该可以解决问题。

SELECT for UPDATE不会让其他线程选择同一行,直到拥有该行的线程提交新版本。