1. 程式人生 > >MySQL中select * for update鎖表的範圍

MySQL中select * for update鎖表的範圍

MySQL中select * for update鎖表的問題

由於InnoDB預設是Row-Level Lock,所以只有「明確」的指定主鍵,MySQL才會執行Row lock (只鎖住被選取的資料例) ,否則MySQL將會執行Table

Lock (將整個資料表單給鎖住)。 舉個例子: 假設有個表單products ,裡面有id跟name二個欄位,id是主鍵。

例1: (明確指定主鍵,並且有此筆資料,row lock)

SELECT * FROM products WHERE id='3' FOR UPDATE;

SELECT * FROM products WHERE id='3' and type=1 FOR UPDATE;

例2: (明確指定主鍵,若查無此筆資料,無lock)

SELECT * FROM products WHERE id='-1' FOR UPDATE;

例2: (無主鍵,table lock)

SELECT * FROM products WHERE name='Mouse' FOR UPDATE;

例3: (主鍵不明確,table lock)

SELECT * FROM products WHERE id<>'3' FOR UPDATE;

例4: (主鍵不明確,table lock)

SELECT * FROM products WHERE id LIKE '3' FOR UPDATE;
注1: FOR UPDATE僅適用於InnoDB,且必須在交易區塊(BEGIN/COMMIT)中才能生效。

注2: 要測試鎖定的狀況,可以利用MySQL的Command Mode ,開二個視窗來做測試。
在MySql 5.0中測試確實是這樣的

另外:MyAsim 只支援表級鎖,InnerDB支援行級鎖 添加了(行級鎖/表級鎖)鎖的資料不能被其它事務再鎖定,也不被其它事務修改

(修改、刪除) 。是表級鎖時,不管是否查詢到記錄,都會鎖定表。

相關推薦

MySQLselect * for update範圍

MySQL中select * for update鎖表的問題 由於InnoDB預設是Row-Level Lock,所以只有「明確」的指定主鍵,MySQL才會執行Row lock (只鎖住被選取的資料例) ,否則MySQL將會執行Table Lock (將整個資料表單給鎖住)。 舉個例子: 假設有個表單p

MySql資料庫MySQLselect * for update的問題

       由於InnoDB預設是Row-Level Lock,所以只有「明確」的指定主鍵,MySQL才會執行Row lock (只鎖住被選取的資料例) ,否則MySQL將會執行Table Lock (將整個資料表單給鎖住)。 舉個例子: 假設有個表單p

數據庫:Mysqlselect ... for update”排他分析

nbsp 檢索 語句 mit AI pda 兩種 訪問 upd Mysql InnoDB 排他鎖 用法: select … for update; 例如:select * from goods where id = 1 for update; 排他鎖的申

資料庫:Mysqlselect ... for update”排他分析

Mysql InnoDB 排他鎖 用法: select … for update; 例如:select * from goods where id = 1 for update; 排他鎖的申請前提:沒有執行緒對該結果集中的任何行資料使用排他鎖或共享鎖,否則

Mysql select for update 的幾種情況

悲觀鎖是對資料被的修改持悲觀態度(認為資料在被修改的時候一定會存在併發問題),因此在整個資料處理過程中將資料鎖定。悲觀鎖的實現,往往依靠資料庫提供的鎖機制(也只有資料庫層提供的鎖機制才能真正保證資料訪問的排他性,否則,即使在應用層中實現了加鎖機制,也無法保證外部系統不會修改資料)。 使用場景舉例

oracle for update資源釋放之kill -9和alter system kill session 'sid,serial#';

查詢 sele 操作 sid 操作系統 objects lte 需要 ssi 通過for update鎖表,通過操作系統方式和oracle方式終止進程方式 --查詢需要終止進程的情況,包括操作系統進程 select proc.sPID, sess.sid,

MySQL的行級,,頁級

In 回退 常用 info 部分 title 一個 相關 鍵值 轉載:https://blog.csdn.net/zp522123428/article/details/75413745##s4 在計算機科學中,鎖是在執行多線程時用於強行限制資源訪問的同步機制,即用於在並發

Oracle 共享和排它、 DML和DDLfor update 的問題

共享鎖和排它鎖 oracle有兩種模式的鎖:排他鎖(exclusive lock,即X鎖)和共享鎖(share lock,即S鎖)。 共享鎖:如果事務T對資料A加上共享鎖後,則其他事務只能對A再加共享鎖,不能加排他鎖。獲准共享鎖的事務只能讀資料,不能修改資料。(注:共享鎖是表級的,比如Sele

資料庫Select For update語句的解析

——————————— Oracle —————————————————– Oracle 的for update行鎖 鍵字: oracle 的for update行鎖   SELECT…FOR UPDATE 語句的語法如下:   SELECT …

mysqlkill掉所有的程序

轉載請保留如下作者資訊 作者 : jesse 3點鐘剛睡下, 4點多, 同事打電話告訴我使用者資料庫掛掉了. 我起床看一下程序列表. mysql>showprocesslist; 出來嘩啦啦好幾螢幕的, 沒有一千也有幾百條, 查詢語句把表鎖住了, 趕緊找出第一個Locked的thread_id,

ORACLE更新資料,PLSQL DeveloperSELECT ... FOR UPDATESELECT T.*,ROWID的區別

背景:ORACLE中更新少量資料時,在PLSQL  Developer中,一般用的語句是SELECT   FOR   UPDATE和SELECT   T.*,ROWID,這倆語句執行之後可以手動在查詢出來的資料中修改。例項背景:表名A,資料如下:  ACOL1    COL2

【數據庫系列】MySqlselect範圍

nbsp 範圍 nod 指定 lock 無數據 才會 rdb sele 由於InnoDB預設的是Row-Level Lock,只有明確指定主鍵的時候MySql才會執行Row lock,否則MySql將會執行Table Lock. 1、明確指定主鍵則是行鎖 2、明確指定主鍵,

Mysql過程詳解(4)-select for update/lock in share mode 對事務並發性影響

per inno targe 允許 evel transacti 修改 not null warn select for update/lock in share mode 對事務並發性影響 事務並發性理解 事務並發性,粗略的理解就是單位時間內能夠執行的事務數量,常見的單

DB2幾個隔離級別select..for update with ** 的行

最近專案中遇到了多執行緒高併發專案db2資料庫表死鎖的情況,蒐集了一些關於表死鎖的資料 Create table RRTest (pkID VARCHAR(20) NOT NULL ,unID1&nb

mysql事務和 SELECT FOR UPDATE

事務:當然有的人用begin /begin work .推薦用START TRANSACTION 是SQL-99標準啟動一個事務。 start transaction #開始一個事務 操作 savepoint sp1 #儲存點名稱 操作 ROLLBACK ROLLBACK To sp1

[MySQL] 行級SELECT ... LOCK IN SHARE MODE 和 SELECT ... FOR UPDATE

一、譯文 If you query data and then insert or update related data within the same transaction, the regular SELECT statement does not

SELECT語句for update的用法(的運用)

回覆1:一般FOR UPDATE用在PL/SQL的遊標裡,它的作用就是一個行級鎖(對遊標裡所有的記錄),如果其他程序要更新這個遊標行級鎖裡的記錄,就必須等待當前程序的COMMIT或者回滾。 該語句用來鎖定特定的行(如果有where子句,就是滿足where條件的那些行)

【轉載】MySQL事務以及SELECT ... FOR UPDATE的使用

商品 tail ase -a base 我們 evel erl tel MySQL中的事務,默認是自動提交的,即autocommit = 1; 但是這樣的話,在某些情形中就會出現問題:比如: 如果你想一次性插入了1000條數據,mysql會commit1000次的, 如果我

select for update引發死分析

而在 back ons 關系 級別 分析 得到 ica 分享 本文針對MySQL中在Repeatable Read的隔離級別下使用select for update可能引發的死鎖問題進行分析。 1. 案例 業務中需要對各種類型的實體進行編號,例如對於x類實體的編號可能是x2

MySQL的行級、頁級

常用 一點 存儲引擎 rac 鎖定 方法 線程 加鎖 計算機      在計算機科學中,鎖是在執行多線程時用於強行限制資源訪問的同步機制,即用於在並發控制中保證對互斥要求的滿足。   在DBMS中,可以按照鎖的粒度把數據庫鎖分為行級鎖(INNODB引擎)、表級鎖(MYISA