事務概念及存儲引擎
1.0 為何要事務?
先來看一個場景,銀行轉賬匯款:
李彥宏和周鴻祎天天打架,現在讓李彥宏給周鴻祎轉款1000 元
設計如下表
account表
編號(id)用戶名(user)金額(cash)
1李彥宏3000
2周鴻祎2000
傳統的做法:
mysql> update account set cash = cash -1000 where id =2;
update account set cash =cash +1000 where id=1;
缺陷:
不安全。比如減少李彥宏錢的指令執行了,但是增加周鴻祎錢的指令卻沒有執行成功。
這個時候,我們就要使用mysql的事物機制。
1.1事務
1.2事務的使用
事務相關語句 DTL
1.3事務的四種特性:
1.原子性,是一個不可分割的邏輯單元,一組sql語句,要麼都執行,要麼都不執行。
2.隔離性,事務中的執行過程是不可見的。
3.持久性,事務一旦提交,就不可撤銷。
4.一致性,事務在發生之前和發生之後,數據是一致。(能量守恆)
1.4事務的原理:
傳統方式:
事務機制:
上面的例子:李彥宏給周鴻祎轉錢用事物的代碼:
#開啟事物
Start transaction;
#執行的代碼
Update account set cash=cash-1000 where id=1;
Update account set cash+1000 where id=2;
#提交
commit
# 語句出錯 可以回滾
#rollback
1.5事務在哪些場合下應用:
一般來說,對於安全性要求比較的業務,建議使用事務。
2.0 mysql存儲引擎
何為存儲引擎?
我們說數據庫是組織、存儲和管理數據的倉庫。那麼,數據庫存儲數據的方式,就是存儲引擎。
在mysql中,存儲引擎是以插件的形式加載的。Mysql的存儲引擎種類繁多,對於我們來說,要熟悉兩種存儲引擎去,MyISAM和inonoDB。
Myisam不支持事務。
Innodb支持事務。
全文索引在mysql5.5以前版本中,innodb是不支持的,但是5.5以後的版本支持。
常見存儲引擎
mysql默認的存儲引擎,
在mysql5.5以前的版本:MyISAM
在mysql5.5以後的版本:innodb
如果我們要自己聲明存儲引擎:
Create table()engine=myisam default charset utf8