今天來講說MySQL事務,其實MySQL事務是一個比較廣且很是重要的概念。一篇文章確定是不夠描述的,先後會分爲好幾篇文章來寫這個專題,其中內容包括但不限於如下內容:數據庫
事務的概念。微信
事務的原則。併發
MySQL中事務自動提交,手動提交以及回滾。工具
事務各個隔離級別的區別。spa
MySQL中如何設置事務?修改默認事務默認級別。3d
事務與鎖的關係。排序
各種鎖之間的區別以及使用場景。 等等!索引
內容按部就班,在前面的章節,講解的都是比較大而全的概念,後面會掰開每一個細節來zhu說明。事務
提及事務,其實你們都挺熟悉的,維基百科中是這樣描述的:ci
數據庫事務(簡稱:事務)是數據庫管理系統執行過程當中的一個邏輯單位,由一個有限的數據庫操做序列構成。事務一般包含一個序列的對數據庫的讀/寫操做。
既然說道了事務,就不得不說事務的四大特性了:
原子性(Atomicity):事務做爲一個總體,也就是說事務中的對數據庫的操做要麼所有被執行,要麼都不執行。例如: 我用銀行轉帳,從A帳戶轉帳到B帳戶, 這裏就存在A帳戶的扣減,B帳戶的添加。事務的原子性確定是A帳戶扣減後,必定在B帳戶上添加。
一致性(Consistency): 事務應確保數據庫的狀態從一個一致狀態轉變爲另外一個一致狀態。
隔離性(Isolation):多個事務併發執行時,一個事務的執行不該影響其餘事務的執行。(這裏還有很細節,在後續的文章中會詳細說明。)
持久性(Durability):已被提交的事務對數據庫的修改應該永久保存在數據庫中,好比修改操做,事務提交後,就會永久修改。也就是說:開啓事務後在沒提交前,回滾是有效的。 例如:
begin;
update t_base_user name="鞠騫",updated_at=now() where oid=1;
rollback;
這個時候才能回滾。
例如:
begin;
update t_base_user name="鞠騫",updated_at=now() where oid=1;
commit;
rollback;
上面回滾是無效的。由於事務已提交,已經持久化了。此時回滾是無心義的。
其實在MySQL InnoDB存儲引擎中,默認是開啓事務的。固然咱們也能夠經過命令來設置開啓與禁用自動提交。
顯示MySQL設置:
show variables like "autocommit";
結果:
Variables_name | value |
---|---|
autocommit | ON |
咱們也能夠經過下面命令來設置該屬性的值。
set autocommit = 0;
來禁用自動提交。(注意不會當即生效)!
經過
set autocommit = 1;
命令來開啓自動提交模式。
MySQL中也提供了一系列命令來控制手動的開啓,提交,回滾事務操做。下面咱們一一來介紹。
開啓事務: 使用start transaction;或者begin;開啓一個新的事務;
提交事務: commit,提交當前事務,使其持久化;
回滾事務: rollback,回滾當前事務。
下面舉個例子:
begin;
update t_base_user name="鞠騫",updated_at=now() where oid=1;
commit;
咱們知道經過 begin;或 start transaction 命令只是開啓了一個事務,若是沒有commit;的話,其實對數據是沒有真正的修改的,(咱們可使用Navicat工具,同時開啓兩個查詢窗口來驗證)。
今天給你們介紹的命令是:show index from table_name;
做用: 顯示該表中的全部索引信息。
例如:
show full index from t_base_user;
顯示結果以下:
Table:顧名思義,就是表名。
Non_unique: 0表示無重複項, 1表示容許重複。如主鍵,惟一索引則爲0。
Key_name: 索引的名字,這裏須要注意的是,除了自定義索引名字外,還有幾個固定值: 如主鍵: PRIMARY。
Seq_in_index: 表示索引中的序號,值得注意的是,該字段從1開始。聯合索引。如:
alter table t_base_user add index idx_email_name(email,name);
像上述這種,此時的email的Seq_in_index就是1,name的Seq_in_index就是2。
Column_name:索引列名。
Collation:表示如何在索引中對列進行排序。這能夠具備值A(升序)或NULL(不排序) Cardinality:根據以整數存儲的統計數字進行計數。(參考值)。該基數越大,說明其命中索引的機率越大。
Sub_part: 索引前綴。也就是說,若是列只是部分索引,則索引字符的數量,若是整列索引,則爲NULL。
Null :表示該索引是否容許NULL,若是容許則爲YES,不然爲''。
Index_type:索引類型,常見有類型有(BTREE, FULLTEXT(全文), HASH(哈希),RTREE)。
Comment :備註信息。
Index_comment : 索引備註信息。建立時的信息,如:
alter table t_base_user add index idx_email_name(email,name) comment "remark";
此時的"remark"內容,就會顯示在此處。
相關閱讀:
掃碼關注,一塊兒進步
我的博客: http://www.andyqian.com