Mysql資料庫的鎖機制

2021-09-26 18:54:59 字數 2493 閱讀 5916

鎖機制:

當客戶端操作表(記錄)時,為了保證操作的隔離性(多個客戶端操作不能相互影響),通過加鎖來處理。

操作方面:

讀鎖:讀操作時增加的鎖,也叫共享鎖,s-lock。特徵是所有人都只可以讀,只有釋放鎖之後才可以寫。

寫鎖:寫操作時增加的鎖,也叫獨佔鎖或排他鎖,x-lock。特徵,只有鎖表的客戶可以操作(讀寫)這個表,其他客戶讀都不能讀。

鎖定粒度(範圍)

表級鎖:開銷小,加鎖快,發生鎖衝突的概率最高,併發度最低。

myisam引擎的表支援表鎖,

行級鎖:開銷大,加鎖慢,發生鎖衝突的概率最低,併發度也最高。

innodb引擎的表支援行鎖與表鎖

1、表鎖

建立測試表,並新增測試資料:

create table user(

id int primary key auto_increment,

name varchar(32) not null default '',

age tinyint unsigned not null default 0,

email varchar(32) not null default '',

classid int not null default 1

)engine myisam charset utf8;

insert into user values(null,'xiaogang',12,'[email protected]',4),

(null,'xiaohong',13,'[email protected]',2),

(null,'xiaolong',31,'[email protected]',2),

(null,'xiaofeng',22,'[email protected]',3),

(null,'xiaogui',42,'[email protected]',3);

新增鎖的語法: lock table table_name1 read|write,table_name2 read|write

釋放鎖的語法:unlock tables

注意:新增讀鎖後,自己和其他的程序(使用者)只能對該錶查詢操作,自己也不能執行修改操作。自己查詢會直接報錯,其他使用者查詢會產生阻塞情況。新增表的鎖定後,針對鎖表的使用者,只能操作鎖定的表,不能操作沒有鎖定的表。新增寫鎖,只有鎖表的客戶可以操作(讀寫)這個表,其他客戶讀都不能讀。2、行鎖

innodb儲存引擎是通過給索引上的索引項加鎖來實現的,這就意味著:只有通過索引條件(主鍵)檢索資料,innodb才會使用行級鎖,否則,innodb使用表鎖

語法:

語法: 

begin;(開始)

執行語句; 

commit; (釋放)

3、php實現鎖機制從資料庫中取出id的值(比如id=100) 

把這個值+1(id=100+1)

再把該值存回到資料庫(id=101)

首先建立一張表

create table a(id int) engine myisam charset utf8;

新增資料

insert into a values(100);

**如下:

$pdo = new pdo('mysql:host=localhost;dbname=slf_test','root','');

//設定字符集

$pdo->exec('set names utf8');

//新增鎖

$pdo->exec('lock table a write');

//取出id

$res = $pdo->query('select id from a');

$info = $res->fetch(pdo::fetch_assoc);

$id = $info['id'];

//給id的值加一

$id = $id+1;

//把值寫入資料庫

$pdo->exec('update a set id=$id');

//釋放鎖

$pdo->exec('unlock tables');

MySQL資料庫的鎖機制

原文首發於 本文出自 rebornchang的部落格 拋開資料庫引擎說資料庫鎖機制的都是流氓 引言 mysql資料庫的引擎分為三種,myisam isam innodb以及memory,具體的引擎型別效能比較可以baidu到,這裡就不多說了,本文中所說的鎖機制基於innodb引擎,那為啥說基於inn...

MySQL資料庫的鎖機制

在併發訪問情況下,很有可能出現不可重複讀等等讀現象。為了更好的應對高併發,封鎖 時間戳 樂觀併發控制 樂觀鎖 悲觀併發控制 悲觀鎖 都是併發控制採用的主要技術方式。按操作劃分 dml鎖,ddl鎖 按鎖的粒度劃分 表級鎖 行級鎖 頁級鎖 按鎖級別劃分 共享鎖 排他鎖 按加鎖方式劃分 自動鎖 顯示鎖 按...

資料庫(七) MySQL鎖機制

資料庫的樂觀鎖和悲觀鎖?mysql 中有哪幾種鎖,列舉一下?mysql中innodb引擎的行鎖是怎麼實現的?mysql 間隙鎖有沒有了解,死鎖有沒有了解,寫一段會造成死鎖的 sql 語句,死鎖發生了如何解決,mysql 有沒有提供什麼機制去解決死鎖 鎖是計算機協調多個程序或執行緒併發訪問某一資源的機...