我们使用activerecord来操纵数据库中的数据。但是我们遇到了写冲突的麻烦。这看起来像是多线程编程中的读/写冲突。在数据库的情况下,我不知道是否应该像多线程编程中的锁内存访问一样锁定数据库。
更具体地说,是以下情况:
1程序A使用从数据库读取的数据创建一个activerecord,然后对其进行修改。
2程序B创建一个activerecord,正好指的是数据库中的同一行。
3 A将数据写回db。
4 B也将数据写入db。
出现了冲突。
我们使用yii框架构建我们的网站,并使用activerecord访问MySql数据库。
我们应该在逻辑中执行所有操作还是使用某些数据库实用程序?
答案 0 :(得分:1)
将所有内容放入事务中并在选择行时使用select for update
应该可以解决问题。
SELECT for UPDATE
不会让其他线程选择同一行,直到拥有该行的线程提交新版本。