Giả sử bạn đang sử dụng công cụ InnoDB cho các bảng mà bạn sẽ phát hành giao dịch trên:
Nếu yêu cầu là trước tiên bạn cần đọc hàng và khóa riêng hàng đó, trước khi cập nhật hàng, bạn nên phát hành SELECT ... FOR UPDATE
truy vấn. Một cái gì đó như:
$db->beginTransaction();
try
{
$select = $db->select()
->forUpdate() // <-- here's the magic
->from(
array( 'a' => 'yourTable' ),
array( 'your', 'column', 'names' )
)
->where( 'someColumn = ?', $whatever );
$result = $this->_adapter->fetchRow( $select );
/*
alter data in $result
and update if necessary:
*/
$db->update( 'yourTable', $result, array( 'someColumn = ?' => $whatever ) );
$db->commit();
}
catch( Exception $e )
{
$db->rollBack();
}
Hoặc chỉ cần phát hành 'raw' SELECT ... FOR UPDATE
và UPDATE
Câu lệnh SQL trên $db
tất nhiên.