MySQL之鎖 儲存引擎 調優 事務與事務回滾

2021-08-28 03:44:55 字數 2791 閱讀 9912

目的:解決客戶端併發訪問的衝突問題

鎖有兩種:鎖型別和鎖粒度

鎖型別

讀鎖:也叫共享鎖,用於查詢表。在你查詢時會對錶加鎖,此時別人是不能對錶記錄進行更改的,只能查詢,當你查詢結束,鎖就會解開,別人才可以進行更改。

寫鎖:也叫互斥鎖、排他鎖,用於更新表,當你在更新表記錄會對錶加鎖,此時別人既不能查也不能更改。

鎖粒度

行級鎖 innodb

查詢和更新都鎖一行

表級鎖 myisam

查詢和更新都會鎖整張表

儲存引擎:engine,就是處理表的處理器,預設是innodb,常用的還有myisam

檢視表的儲存引擎:

show

create

table 表名;

在建立表時指定儲存引擎:

create table 表名

(...)engine=myisam

那麼常用的儲存引擎右移什麼特點:

innodb:

生成的表的名字是:

表名.frm:表結構和表索引

表名.idb:表記錄

myisam:

生成的表的名字:

表名.frm:表結構

表名.myd:表記錄

表名.myi:索引資訊

那麼如何決定使用哪種儲存引擎呢?

1. 同時查詢操作多的表使用myisam(使用innodb比較浪費資源)

2. 寫操作多的表使用innodb

這一部分是重點記得內容

選擇合適的儲存引擎

sql語句優化(避免全表掃瞄,全表掃瞄比較浪費)

說幾個調優的案例

# 優化前

select score from stuinfo where *** is null;

# 優化後

建立表時***字段設定預設值(如:男,女,man,women。。。)

第二個 or

# 優化前:

select name

from stuinfo where

id=10

orid=20;

# 優化後:

select name

from stuinfo where

id=10

union all

select name

from stuinfo where

id=20;

第三個 模糊查詢

# 優化前:

select country from sanguo where

name like '%惇';

# 優化後:

select country from sanguo where

name like '夏%惇'; --最好不要第乙個用%

第四個 in / not

in# 優化前:

select name

from stuinfo where

idin (1, 2, 3, 4);

# 優化後:

select name

from stuinfo where

idbetween

1and

4; --當然必須是連續的,不是的話另做考慮

什麼是事務:一件事從開始到結束的整個過程就是一件事務

作用:確保資料的一致性

sql命令會自動提交到資料庫執行,如果執行成功會commit,否則rollback(回滾)

回滾就是這條命令執行失敗,報廢,魂飛魄散(回到執行前的狀態)

舉個案例:

tom:有一張建行卡

lucy:有一張工行卡

tom在建行自動取款機上geilucy轉5000元錢

表1:ccb

create

table ccb(

name varchar(20),

money decimal(20,2)

);insert

into ccb values('tom', 2000000);

表2:icbc

create

table icbc(

name varchar(20),

money decimal(20,2)

);insert

into icbc values('lucy', 0);

tom開始轉錢:

mysql> begin;

mysql> update ccb set money=money-5000

where name='tom';

mysql> update icbc set money=money+5000

where name='lucy';

mysql> commit;

----以上是乙個執行成功的栗子,因為沒有碰到任何執行不成功的條件----

mysql> begin;

mysql> update ccb set money=money-5000

where name='tom';

mysql> update icbc set 伺服器故障。。。;

mysql> rollback;

-----執行成功才怪了吧-----

the end!

MySQL 效能調優之儲存引擎

原文 mysql效能調優中,對myisam儲存引擎的優化。在優化myisam儲存引擎中,需要考慮的點如下 盡量索引,myisam只快取索引不快取資料 根據實際需求,調整讀寫優先順序 延遲插入,使用 insert delay,減少和 select 競爭 資料順序操作,讓insert全部到尾部,減少和s...

MySQL事務調優

資料庫事務是資料庫系統執行過程中的乙個邏輯處理單元,保證乙個資料庫操作要麼成功,要麼失敗。資料庫事務具有以下四個基本屬性 正是這些特性,才保證了資料庫事務的安全性。而在mysql中,鑑於myisam儲存引擎不支援事務,mysql的事務都是在innodb儲存引擎的基礎上進行的。innodb實現了兩種型...

mysql主流Innodb儲存引擎 事務鎖分析

repeatable read 可重讀 mysql中innodb預設的隔離級別。悲觀鎖 為了防止併發導致資料庫操作受其他執行緒運算元據庫影響,一般基於資料庫的悲觀鎖來加鎖操作。從sql語句來看,為了搶占獨佔鎖,兩種方式。1 更新語句加鎖 begin 開啟事務 insert into a.update...