我要解决什么问题?数据库现在有五万条state=600的数据,每次取出1000条进行处理,我需要每五分钟跑一次crontab,将这五万条数据的state变为state=700我是怎么做的?while(true){//每次取出1000条进行处理$sql='select*fromtable_awherestate=600limit1000';$multi_row=$db->query($sql)->get_result();if(!$multi_row){break;}//处理队列中的这1000条数据,1改变table_a中state的状态,2在table_b修改一些数据,//这两个操作有一个执行不成功我就需要回滚事务foreach($multi_rowas$val){$db->star_trance();if(!$db->table_a->do_something(['state'=>700])){$db->rollback();}if(!$db->table_b()->do_something()){$db->rollback();}$db->change()$db->commint()}}上述解决方案遇到的问题我发现每当失败回滚后,数据库会每次查出这条状态没有修改成功的state=600的数据,这就导致了上面$multi_row永远不会空,进而导致整个while循环变成死循环,我又想到我可以统计大概的循环次数,一到循环次数就强制退出,可下次crontab依然会遇到这个问题,我该怎么办?
相关分类