摘要:本文主要學習了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引擎,而且也支持事務。
未完待續。