程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 小貝_mysql存儲引擎及事務概念

小貝_mysql存儲引擎及事務概念

編輯:MySQL綜合教程

小貝_mysql存儲引擎及事務概念


存儲引擎及事務概念

簡要:
1、什麼是存儲引擎
2、什麼是事務

 

一、存儲引擎

 

通俗地講就是存儲和管理數據的方式

形象例子:

 

某處地方的自行車管理員:李某,張某。每天都有很多人來存取自行車。李某的管理方式是: 車主自行存放,李某也不記錄對方存的是什麼車。取車時則要交管理費。也不檢查取的是否是對方自己的車。相反,張某,則在車主存放車時,記錄存放人的特征以及對應車的信息。當人來取車時,張某還要小心核對,人與車的特征是否對應。

 

從上述例子可知:

 

a、從效率的角度來看: 李某比張某快,因為其不用進行校對

 

b、從安全性的角度來看: 張某比李某要安全,因為其進行了校對。

 

總結: 實際上,mysql的存儲引擎也是這樣工作,每種存儲引擎都有自身的存取方式,因此在選擇上,應該根據實際情況來定。

 

1、如何查看mysql的引擎

mysql> show engines;

 

2、常用的存儲引擎myisam與innodb的區別

2.1、myisam: 批量插入速度快,不支持事務,表鎖

innodb:批量插入速度相對較慢,支持事務,行鎖

 

 

二、事務

通俗地理解,指一組操作,要麼都成功執行,要麼都不執行。

例如:

用戶A給用戶B轉賬500元

先分析下這個流程:

1、判斷用戶A的卡余額是否大於500元,否則,則無法進行轉賬操作

2、在滿足大於500元的基礎上,用戶A給用戶B進行轉賬

3、轉賬操作成功,則用戶A的卡余額減去500元,用戶B加上500元

用程序描述下這個過程

 


 

query($sqlA);
if( $resultA )
{
$sqlB = "update user set money=money+500 where name='userB'";	//步驟B
$resultB = $db->query($sqlB);	
if( $resultB )
{
	return true;
}else
{
$sqlA = "update user set money=money+500 where name='userA'";	//步驟C
$resultA = $db->query($sqlA);
return false;
}
}
$sqlA = "update user set money=money+500 where name='userA'";	//步驟D
$resultA = $db->query($sqlA);
return false;
?>
 

 


 

 

從事務的角度看:

1、在轉賬過程中,出現有誤,則該錯誤對雙方而言,是沒有影響的。即不可能因為某個錯誤,導致用戶A白白減少500,而用戶B莫名其妙多了500

2、在轉賬過程中,用戶A是不可能看到自己的卡余額減下500,而用戶B也是無法看到自己增加500元,因為轉賬操作還未結束。

3、單單從這個過程,用戶A與用戶B的總金額是不變的。只不過是一方減少,另一方增加

總結下事務的幾個特性

a、 原子性:一組操作,要麼都成功執行,要麼都不執行

b、 隔離性:在所有的操作沒有執行完畢之前,其它會話不能夠看到中間改變的過程

c、 一致性:事務發生前和發生後,數據的總額依然匹配

d、 持久性:事務產生的影響不能夠撤銷

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved