作者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)
→ rocairforce:似乎是用PK找的時候才會row lock 06/03 22:13
→ xxxzzz:前面看起來不像會死鎖,$this->foo()裡面寫法是?後面看不懂 06/04 00:03
→ xxxzzz:不會是select跟update用不同的連線吧? 06/04 00:08
→ rocairforce:my.ini好像有解 明天上班再研究了 06/04 01:11
→ rocairforce:foo只是用pk撈出一筆資料,是同一條連線 06/04 01:12
→ rickysu:google 一下 "交易隔離",重新調整查詢句吧。 06/04 09:44