《MYSQL數(shù)據(jù)庫MySQL事務(wù)一些總結(jié)》要點(diǎn):
本文介紹了MYSQL數(shù)據(jù)庫MySQL事務(wù)一些總結(jié),希望對您有用。如果有疑問,可以聯(lián)系我們。
導(dǎo)讀:MySQL事務(wù):1.MySQL事務(wù)控制語句(1).開啟事務(wù)begin;(2).提交事務(wù)commit;(3).回滾事務(wù)rollback;(4).設(shè)置事務(wù)是否自動提交set autocommit =...
MySQL事務(wù):
1.MySQL事務(wù)控制語句
(1).開啟事務(wù)
begin;
(2).提交事務(wù)
commit;
(3).回滾事務(wù)
rollback;
(4).設(shè)置事務(wù)是否自動提交
set autocommit = {0 | 1}; // 0不自動提交,1自動提交
例如:
begin;// 開啟事務(wù)
insert into table_name values(內(nèi)容);
commit;// 提交事務(wù)
這個就是一個簡單的插入數(shù)據(jù)的事務(wù)
begin;// 開啟事務(wù)
insert into table_name values(內(nèi)容);// 后悔了,不想插入數(shù)據(jù)了
rollback;// 回滾,取消這次的事務(wù)操作
這個就是一個簡單的插入數(shù)據(jù)的回滾事務(wù)
2.MySQL事務(wù)隔離語句
查看MySQL的隔離級別
show variables like 'tx_isolation';
(1).read-uncommitted(讀取未提交內(nèi)容)
臟讀(帶來的問題);
一個用戶在兩次查詢結(jié)果中的內(nèi)容不相同.
設(shè)置默認(rèn)隔離級別(設(shè)置完成后需要重新登錄):
set global transaction isolation level read uncommitted;
兩個用戶同時登錄數(shù)據(jù)庫,分別開啟事務(wù),一個用戶的事務(wù)執(zhí)行增刪改操作,另一個用戶的事務(wù)只進(jìn)行查詢操作,前者執(zhí)行完操作,不進(jìn)行提交,后者就可以看到操作結(jié)果,但如果這時候前者進(jìn)行了事務(wù)的回滾,后者這時候查詢就會看到不一樣與上次不一樣的結(jié)果(也就是沒有進(jìn)行操作的結(jié)果),這就是臟讀問題.
(2).read committed(讀取提交內(nèi)容)
事務(wù)只能看見已經(jīng)提交事務(wù)所做的改變,同一查詢可能返回不同的結(jié)果,此級別導(dǎo)致的不可重復(fù)讀問題.
設(shè)置默認(rèn)隔離級別(設(shè)置完成后需要重新登錄):
set global transaction isolation level read committed;
在一次事務(wù)中,看到了兩次不一樣的查詢結(jié)果(與臟讀類似).
(3).repeatable read(可重復(fù)讀)
能確保同一事務(wù)的多個實(shí)例在并發(fā)讀取數(shù)據(jù)時,會看到同樣的數(shù)據(jù)行(數(shù)據(jù)庫的莫爾納隔離級別).
設(shè)置默認(rèn)隔離級別(設(shè)置完成后需要重新登錄):
set global transaction isolation level repeatable read;
也就在在一次事務(wù)中,無論另一個用戶如何修改數(shù)據(jù),在這次事務(wù)中查詢到的結(jié)果總是相同.
***隱式事務(wù)提交***:
alter table users engine = innodb;// 會造成事務(wù)的隱式提交
?
3.InnoDB鎖機(jī)制
(1).一個表中沒有任何的主鍵和索引,一個事務(wù)會鎖住這個表的所有記錄,其他的事務(wù)無法進(jìn)行操作這個表.
(2).一個表中存在主鍵或者索引,一個事務(wù)會鎖住表的他操作的某行數(shù)據(jù),不回鎖住整個表,如果其他的事務(wù)操作這個表的其他數(shù)據(jù),這個時候是不受影響的.需要注意的是這的行級鎖是間隙鎖,也就是說如果你修改的某幾行數(shù)據(jù),比如過修改id<10的n行數(shù)據(jù).=,這時,id = 11的數(shù)據(jù)也會被鎖住,這是需要注意的.
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/5028.html