MySQL默認(rèn)采用自動(dòng)提交(AUTOCOMMIT)模式阳欲,不是顯示的開啟一個(gè)事務(wù),每個(gè)查詢都被當(dāng)作一個(gè)事務(wù)執(zhí)行提交操作陋率。
在當(dāng)前連接中球化,可以通過設(shè)置AUTOCOMMIT變量來開啟或者禁用自動(dòng)提交功能。
mysql> show variables like 'AUTOCOMMIT';
1或者ON表示開啟瓦糟;0或者OFF表示禁用赊窥。
mysql> set autocommit = 0;
當(dāng) autocommit = 0 時(shí),所有的查詢都在一個(gè)事務(wù)中狸页,直到顯示的執(zhí)行 commit 進(jìn)行提交或者 rollback 進(jìn)行回滾锨能,該事務(wù)才最終結(jié)束,同時(shí)開啟了另一個(gè)事務(wù)芍耘。
或者執(zhí)行命令:
select @@tx_isolation;
start transaction;
顯示聲明事務(wù).
命令行界面進(jìn)入方法 :
運(yùn)行cmd, 然后進(jìn)入mysql的安裝路徑的bin目錄下;
然后通過mysql -u test -p password進(jìn)入;
而且進(jìn)行的時(shí)候需要使用兩個(gè)賬號.
每個(gè)cmd窗口都需要執(zhí)行 set autocommit = 0;
不然的話默認(rèn)就直接提交了. 就沒有事務(wù)的效果.
linux直接通過mysql -u test -p password進(jìn)入.
測試 :
創(chuàng)建account表:
CREATE TABLE account
(
id
int(11) NOT NULL,
account
float(255,0) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
插入測試數(shù)據(jù):
INSERT INTO practise
.account
(id
, account
) VALUES (1, 1000);
INSERT INTO practise
.account
(id
, account
) VALUES (2, 1000);
分別通過test1和test2進(jìn)行登陸.
test1執(zhí)行:
set session transaction isolation level read committed;
update account set account=account+200 where id = 1;
select * from account;
test2執(zhí)行:
test1執(zhí)行commit;后
test2:
可以看出事務(wù)是成功的