MySQL學習——事務

MySQL學習——事務

摘要:本文主要學習了MySQL數據庫的事務操做。mysql

概念

什麼是事務

事務是一組邏輯處理單位,能夠是執行一條SQL語句,也能夠是執行幾個SQL語句。sql

事務用來保證數據由一種存儲狀況變爲另外一種狀況,組成事務的各個單元要麼都執行成功,要麼都執行失敗。數據庫

爲何使用事務

若是隻是簡單的一條SQL語句的執行,那麼是不須要事務的,但在一些複雜的狀況下,一個操做會涉及到多條SQL語句的執行,這種狀況下就有必要保證全部的操做所有成功或者所有失敗。安全

好比,小明給小紅轉帳的一個操做,就會涉及到從小明帳戶扣錢和給小紅帳戶充錢的兩個操做。只有兩個操做都成功執行了整個操做纔算成功,這時就能夠提交整個事務,能夠說狀態由轉帳前變到了轉帳後。不然有任何一個操做執行失敗的話整個操做都要算作失敗,這時就須要恢復事務,保證兩個帳戶上的金額和轉帳前是同樣的,表示恢復到了轉帳前的狀態。併發

因此事務是爲了保證一組操做的完整性而出現的,也是爲了保證數據操做的安全。app

基本術語

保存點(save point):指在事務執行前,或者事務執行後,數據在數據庫裏的一個存儲狀況,有時也會被稱爲狀態。ide

回退(rollback):指撤銷事務的操做,事務執行期間執行的操做都將失效,事務會恢復到上一個狀態。學習

提交(commit):值提交事務的操做,事務期間執行的操做所有生效,事務進入一個新的狀態。spa

事務的特性

原子性:指事務包含的全部操做要麼所有成功,要麼所有失敗回滾。code

一致性:指事務必須使數據庫從一個一致性狀態變換到另外一個一致性狀態。

隔離性:指當多個用戶併發訪問數據庫而且操做同一張表的時候,數據庫爲每個用戶開啓的事務,不能被其餘事務的操做所幹擾,多個併發事務之間要相互隔離。

持久性:指一個事務一旦被提交了,那麼對數據庫中的數據的改變就是永久性的,哪怕是在數據庫系統遇到故障的狀況下也不會丟失提交事務的操做。

使用事務

支持使用事務的引擎

使用 show engines; 命令查看數據庫支持的存儲引擎,以及存儲引擎是否支持事務:

 1 mysql> show engines;
 2 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
 3 | Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
 4 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
 5 | FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
 6 | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
 7 | MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
 8 | BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
 9 | CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
10 | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
11 | ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
12 | InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
13 | PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
14 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
15 9 rows in set (0.00 sec)
16 
17 mysql> 

發現默認的是InnoDB引擎,而且也支持事務。

未完待續。

相關文章
相關標籤/搜索