2013-05-15 46 views
0

我想用這樣的笨查詢功能來更新一列的值獲得更新的領域:UPDATE SQL查詢,並在一個單一的查詢

$this->db->query("UPDATE table SET val = val + 1 WHERE name = 'xxxxx'); 

有沒有什麼辦法讓結果這個更新在同一個查詢函數中?我必須做一個選擇查詢才能做到這一點,並且由於這個應用程序管理的用戶數量很大,所以這很危險。

如果在更新和select之間存在另一個查詢,則結果將不正確。

謝謝!

+2

有關使用一個交易如何? – Benubird

+0

您是否考慮使用* autoincrement *字段? –

+0

mysql 如何使用codeigniter db-> query函數中的事務?當我嘗試它時會失敗。 – mcamara

回答

1

使用交易和更新。這是一個來自zend的例子,它是一種類似於db訪問的東西:

$db->beginTransaction(); 
$val = $db->select()->forUpdate()->from('table', 'val')->orderBy('val DESC')->limit(1)->query()->fetchColumn(); 
$db->update('table', 'val = '.($val+1), 'name = "xxx"'); 
$db->commit() 

for-update with the transaction防止另一個查詢干擾。

瞭解更多關於更新這裏:http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

,並約在這裏笨交易:http://ellislab.com/codeigniter/user-guide/database/transactions.html(感謝@Nanne爲)