1. 程式人生 > 其它 >Mysql 遇到神奇的“本次本客戶端效現象”,資料庫並未被改變 + 神奇“卡頓現象”

Mysql 遇到神奇的“本次本客戶端效現象”,資料庫並未被改變 + 神奇“卡頓現象”

Mysql 遇到神奇的“本次本客戶端效現象”,資料庫並未被改變+ 神奇“卡頓現象”

結論:commit 好處多多,既能保證執行操作結果符合實際情況,還能“重新整理”

◆◆場景:為了測試關閉自動提交真的有效嗎?的情況下的發現:

1,神奇的“本客戶端效現象”

◇◇客戶端:mysqlworkbench

◇程式碼:

#事務

#建立事務

drop table if exists `Acount`;

CREATE TABLE `Acount`(

       `id` int PRIMARY KEY AUTO_INCREMENT,

    `name` varchar(50),

    `money
` float )ENGINE=InnoDB, charSet=utf8mb4; #新增資料 INSERT INTO `Acount` VALUES (default, 'huanglaoban', 100); INSERT INTO `Acount` VALUES (default, 'dangdang', 100); select * from `Acount`; #模擬轉賬場景: set sql_safe_updates=0; /*取消安全模式*/ #關閉自動提交事務 set autocommit=0; show variables like 'autocommit'; #舉例轉賬事務 start
transaction; update `Acount` set `money` = `money` - 10 where `name` = 'huanglaoban'; update `Acount` set `money` = `money` + 10 where `name` = 'dangdang'; commit; set sql_safe_updates=1;/*設定回安全模式*/ #設定自動提交事務 set autocommit=1; select * from `Acount`;

結果完美,沒問題!我們要的效果符合實際。

◇測試關閉自動提交真的有效嗎?

程式碼語句:

set sql_safe_updates=0; /*取消安全模式*/
 #關閉自動提交事務 
 set autocommit=0;
update `Acount` set `money` = `money` - 10 where `name` = 'huanglaoban';
select * from `Acount`;

此刻試試在控制檯關閉自動提交,再試試結果怎麼樣:結果mysqlworkbench依然剎不住車,什麼操作它照常執行,而mysql控制檯,依然面不改色,不為所動,不給執行操作。

最後,我明白,一切神奇現象的背後是:少了個commit的提交。

因為沒有COMMIT,就算AUTOCOMMIT的值等於1,也會不提交到資料庫。

2,神奇“卡頓現象”

場景:先在服務端關閉自動提交後,直接設定可以自動提交後,卡頓想現象發生:

看我控制檯大疑惑:

解決:老鐵補上commit,相當於“重新整理功效”吧

最後,大總結:

commit 好處多多,既能保證執行操作結果符合實際情況,還能“重新整理”

參考文章:

https://blog.csdn.net/weixin_43182179/article/details/114678955

https://blog.csdn.net/xiaoyi23000/article/details/51690601/

http://c.biancheng.net/view/7291.html