作者rocairforce (拾贰)
看板PHP
标题[请益] MySql lock
时间Mon Jun 3 21:49:32 2013
这好像应该在DB版问,不过我比较爱这里啦
php:5.3 mysql 5.0
是这样来着,我在交易模式底下先用PK查了一笔资料
确认这笔资料後再用这个PK去where ,并修改了一个栏位
这里是code
foreach($data AS $v){
$result = $this->foo($v);
if($result['data']){
$result['data']['column_a'] = '我爱一条柴';
}
//这边再把资料update回去
}
然後就锁住了,shit
google了一下,似乎只要是用索引查的就会row lock
这样不就变成我每查询完就要commit,然後再塞,很不给力啊(支那用语)
因为我的回传都是同一个方法
return return_msg
(__FILE__, __LINE__,array('data' => $result['data']), $result['code'] );
[上面是同一行]
$result['data']是查询後的资料,$result['code']MySql错误代码
所以我的commit都放在这个回传里,一旦$result['code']为真时会rollback
如果还要在程式里写commit,那不就多此一举了,请问各位大神,此题有解吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.117.208.2
※ 编辑: rocairforce 来自: 122.117.208.2 (06/03 21:50)
1F:→ rocairforce:似乎是用PK找的时候才会row lock 06/03 22:13
2F:→ xxxzzz:前面看起来不像会死锁,$this->foo()里面写法是?後面看不懂 06/04 00:03
3F:→ xxxzzz:不会是select跟update用不同的连线吧? 06/04 00:08
4F:→ rocairforce:my.ini好像有解 明天上班再研究了 06/04 01:11
5F:→ rocairforce:foo只是用pk捞出一笔资料,是同一条连线 06/04 01:12
6F:→ rickysu:google 一下 "交易隔离",重新调整查询句吧。 06/04 09:44