看板 PHP 關於我們 聯絡資訊
這好像應該在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