所以我有两种方法。方法一向我的数据库中添加一行。方法2选择并更新表的最新10行。
如果方法1在方法2选择数据后添加新行,但在更新之前,方法2将更新错误的10行?事务在这里有用吗?还是需要锁定表?
function one(){
insert row
}
function two(){
select latest 10 rows
update latest 10 rows
}
//编辑/////////////////////////////////////////////////////////////////////////////
我不愿意投入我的实际方法(它们是代码点火器方法),但在这里它们是
function one(){
insert row
}
function two(){
$this->db->where('status', '1');
$this->db->limit(10);
$query = $this->db->get('rrsf_users');
$this->db->where('status', '1');
$this->db->limit(10);
$this->db->update('rrsf_users', array('status' => '2'));
}
因此看起来像是两个独立的查询,因此出现了“当前最后10行”问题。不确定最好的解决方法。锁定表或循环遍历从查询中选择的每个索引并将其添加到where查询?
最佳答案
这取决于您如何选择这10行。如果您有一个唯一的索引,并且您知道要更新哪10行(并且您更新的正是之前选择的那10行),那么您没有问题。当然,如果以更新刚刚插入的行的方式编写update语句,则会遇到此问题。实际上,锁定在这里对您没有多大帮助,因为您只能锁定已经存在的内容。
简而言之:如果你知道你更新了什么,你没有问题。如果更新“当前最后10行”,则有问题。