|
藍森林 http://www.lslnet.com 2006年8月26日 15:18
請高手救命 ,MYSQL怎麼實現行記錄鎖定?????
,MYSQL怎麼實現行記錄鎖定!
我在BEGIN;SELECT * FOR UPDATE 的時候只會鎖定整個表不能實現行記錄的鎖定,但是ORACLE可以在游標裡FOR UPDATE 就可以鎖定行記錄了!
請高手出來幫個忙 |
請高手救命 ,MYSQL怎麼實現行記錄鎖定?????
InnoDB 中的隔離級詳細描述:
READ UNCOMMITTED 這通常稱為 'dirty read':non-locking SELECTs 的執行使我們不會看到一個記錄的可能更早的版本;因而在這個隔離度下是非 'consistent' reads;另外,這級隔離的運作如同 READ COMMITTED。
READ COMMITTED 有些類似 Oracle 的隔離級。所有 SELECT ... FOR UPDATE 和 SELECT ... LOCK IN SHARE MODE 語句只鎖定索引記錄,而不鎖定之前的間隙,因而允許在鎖定的記錄後自由地插入新記錄。以一個唯一地搜索條件使用一個唯一索引(unique index)的 UPDATE 和 DELETE,僅僅只鎖定所找到的索引記錄,而不鎖定該索引之前的間隙。但是在範圍型的 UPDATE and DELETE 中,InnoDB 必須設置 next-key 或 gap locks 來阻塞其它用戶對範圍內的空隙插入。 自從為了 MySQL 進行複製(replication)與恢復(recovery)工作'phantom rows'必須被阻塞以來,這就是必須的了。Consistent reads 運作方式與 Oracle 有點類似: 每一個 consistent read,甚至是同一個事務中的,均設置並作用它自己的最新快照。
REPEATABLE READ 這是 InnoDB 默認的事務隔離級。. SELECT ... FOR UPDATE, SELECT ... LOCK IN SHARE MODE, UPDATE, 和 DELETE ,這些以唯一條件搜索唯一索引的,只鎖定所找到的索引記錄,而不鎖定該索引之前的間隙。 否則這些操作將使用 next-key 鎖定,以 next-key 和 gap locks 鎖定找到的索引範圍,並阻塞其它用戶的新建插入。在 consistent reads 中,與前一個隔離級相比這是一個重要的差別: 在這一級中,同一事務中所有的 consistent reads 均讀取第一次讀取時已確定的快照。這個約定就意味著如果在同一事務中發出幾個無格式(plain)的 SELECTs ,這些 SELECTs 的相互關係是一致的。
SERIALIZABLE 這一級與上一級相似,只是無格式(plain)的 SELECTs 被隱含地轉換為 SELECT ... LOCK IN SHARE MODE。
|
請高手救命 ,MYSQL怎麼實現行記錄鎖定?????
謝謝了,但是,能不能給個直接一點的辦法啊?
因為對MYSQL第一次接觸,所以看的不是很懂
上面的意識是不是對它加個consistent read 就能實現對一定條件搜索數據的鎖定,是麼? |
請高手救命 ,MYSQL怎麼實現行記錄鎖定?????
好像不行哦!!!!還是鎖住了整個表,不能對SELECT不到其他的數據進行UPDATE! |
悲慘,搞不頂啊! |
沒試過行鎖,以後有空試試 |
| |