首頁 > 資料庫 > mysql教程 > MySQL中關於事務的具體詳解

MySQL中關於事務的具體詳解

黄舟
發布: 2017-09-11 11:39:06
原創
1436 人瀏覽過

MySQL交易:

1.MySQL事務控制語句

(1).開啟交易

begin;
登入後複製

(2).提交交易

commit;
登入後複製

# (3).回滾事務

rollback;
登入後複製

(4).設定事務是否自動提交

set autocommit = {0 | 1}; // 0不自动提交,1自动提交
登入後複製

例如:

begin;// 开启事务
insert into table_name values(内容);
commit;// 提交事务
登入後複製

這個就是一個簡單的插入資料的事務

begin;// 开启事务
insert into table_name values(内容);// 后悔了,不想插入数据了
rollback;// 回滚,取消这次的事务操作
登入後複製

這個就是一個簡單的插入資料的回滾交易

2.MySQL交易隔離語句

查看MySQL的隔離等級

show variables like 'tx_isolation';
登入後複製

(1). read-uncommitted(讀取未提交內容)

髒讀(帶來的問題);

一個使用者在兩次查詢結果中的內容不相同.

#設定預設隔離等級(設定完成後需要重新登入):

set global transaction isolation level read uncommitted;
登入後複製

兩個使用者同時登入資料庫,分別開啟交易,一個使用者的交易執行增刪改操作,另一個使用者的交易只進行查詢作業,前者執行完操作,不進行提交,後者就可以看到操作結果,但如果這時候前者進行了事務的回滾,後者這時候查詢就會看到不一樣與上次不一樣的結果(也就是沒有進行操作的結果),這就是髒讀問題.

(2).read committed(讀取提交內容)

交易只能看見已經提交事務所做的改變,相同查詢可能會傳回不同的結果,此等級導致的不可重複讀取問題.

設定預設隔離等級(設定完成後需要重新登入):

set global transaction isolation level read committed;
登入後複製

在一次交易中,看到了兩次不一樣的查詢結果(與髒讀類似).

(3).repeatable read(可重複讀)

能確保同一事務的多個實例在並發讀取數據時,會看到同樣的資料行(資料庫的莫爾納隔離等級).

設定預設隔離等級(設定完成後需要重新登入):

set global transaction isolation level repeatable read;
登入後複製

也就在一次事務中,無論另一個使用者如何修改資料,在這次事務中查詢到的結果總是相同.

***隱式事務提交***:

alter table users engine = innodb;// 会造成事务的隐式提交
登入後複製

3. InnoDB鎖定機制

(1).一個表中沒有任何的主鍵和索引,一個事務會鎖住這個表的所有記錄,其他的事務無法進行操作這個表.

(2).一個表中存在主鍵或索引,一個事務會鎖住表的他操作的某行資料,不回鎖住整個表,如果其他的事務操作這個表的其他資料,這個時候是不受影響的.需要注意的是這的行級鎖是間隙鎖,也就是說如果你修改的某幾行數據,比如過修改id<10的n行數據.=,這時,id = 11的資料也會被鎖住,這是需要注意的.

以上是MySQL中關於事務的具體詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
linux安裝mysql報錯
來自於 1970-01-01 08:00:00
0
0
0
mysql 升級後無法重新啟動mysql服務的問題
來自於 1970-01-01 08:00:00
0
0
0
MySQL停止進程
來自於 1970-01-01 08:00:00
0
0
0
phpstudy不能啟動mysql?
來自於 1970-01-01 08:00:00
0
0
0
環境中mysql
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板