目的:解決客戶端併發訪問的衝突問題
鎖有兩種:鎖型別和鎖粒度
鎖型別
讀鎖:也叫共享鎖,用於查詢表。在你查詢時會對錶加鎖,此時別人是不能對錶記錄進行更改的,只能查詢,當你查詢結束,鎖就會解開,別人才可以進行更改。
寫鎖:也叫互斥鎖、排他鎖,用於更新表,當你在更新表記錄會對錶加鎖,此時別人既不能查也不能更改。
鎖粒度
行級鎖 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...