亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入理解MySQL事務(wù)特性與自動(dòng)提交

 更新時(shí)間:2024年07月05日 10:00:05   作者:碼農(nóng)老張Zy  
事務(wù)以及事務(wù)隔離機(jī)制,其實(shí)是所有關(guān)系型數(shù)據(jù)庫(kù)都有的問(wèn)題,本文主要介紹了深入理解MySQL事務(wù)特性與自動(dòng)提交,具有一定的參考價(jià)值,感興趣的可以了解一下

又是比較偏基礎(chǔ)理論的一篇文章,不過(guò)這也是向 MySQL 更高水平進(jìn)階的必經(jīng)之路。關(guān)于事務(wù)以及事務(wù)隔離機(jī)制,其實(shí)是所有關(guān)系型數(shù)據(jù)庫(kù)都有的問(wèn)題,它是一套比較基礎(chǔ)的理論和工具。

事務(wù)特性

事務(wù)這個(gè)東西,想必不用我過(guò)多解釋大家也都清楚,這也是我們學(xué)習(xí)任何數(shù)據(jù)庫(kù)產(chǎn)品的必學(xué)知識(shí)。同時(shí),對(duì)于事務(wù)來(lái)說(shuō),還有 ACID 四大特性,我們先來(lái)復(fù)習(xí)一下。

  • Atomicity 原子性,事務(wù)內(nèi)的操作,要么全成功,要么全失敗,失敗了就回滾,成功了就提交

  • Consistency 一致性,從一個(gè)一致性狀態(tài)變換到另一個(gè)一致性狀態(tài),比如有兩個(gè)人,帳號(hào)里一共有 100 塊,不管兩人怎么來(lái)回轉(zhuǎn)賬,最后的總和還是 100 塊

  • Isolation 隔離性,多個(gè)用戶同時(shí)操作數(shù)據(jù)時(shí),一個(gè)用戶的操作不能被別的用戶影響

  • Durability 持久性,事務(wù)提交了,那么改變就是永久的

有了這四個(gè)特性的保證,我們就可以說(shuō)事務(wù)是非常安全的操作。這個(gè)安全體現(xiàn)在什么地方呢?最典型的例子就是轉(zhuǎn)帳問(wèn)題,A向B轉(zhuǎn)了100塊,首先我們扣除A帳戶里的錢,這時(shí)因?yàn)楦鞣N原因操作中斷了,B的帳戶沒(méi)有收到錢,這時(shí)候A少了100,B沒(méi)有增加,問(wèn)題也就隨之產(chǎn)生了。事務(wù),主要解決的就是這類問(wèn)題。

事務(wù)的自動(dòng)提交

既然這么好,我們需要給所有操作都使用事務(wù)嗎?其實(shí)默認(rèn)情況下 MySQL 是開(kāi)啟了自動(dòng)事務(wù)提交的,你的每一個(gè)操作語(yǔ)句都會(huì)是一個(gè)事務(wù)。注意,是每一個(gè),而不是多個(gè)語(yǔ)句在同一個(gè)事務(wù)中。

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+

這個(gè) autocommit 代表的就是自動(dòng)提交事務(wù),我們可以關(guān)閉它,如果關(guān)閉它的話,則每條語(yǔ)句后面我們都需要 commit 一下?,F(xiàn)在我們開(kāi)兩個(gè)命令行窗口,在第一個(gè)命令行窗口設(shè)置 autocommit 為 OFF 。

mysql> set session autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+

接著,修改一條數(shù)據(jù)。

mysql> update test_user set username='bbb' where id = 2200000;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

然后我們?cè)诹硪粋€(gè)命令行窗口查看數(shù)據(jù),數(shù)據(jù)依然是原來(lái)的狀態(tài),用戶名沒(méi)有更改為 bbb 。這個(gè)時(shí)候,我們回到第一個(gè)命令行窗口,運(yùn)行 commit 提交事務(wù)。此時(shí),再回到另一個(gè)窗口查詢,就可以看到修改之后的數(shù)據(jù)了。

-- 客戶端2
mysql> select * from test_user where id = 2200000;
+---------+----------------------+------------------------------------------+------+---------------------+------------+--------+--------+
| id      | username             | password                                 | salt | created_at          | updated_at | status | gender |
+---------+----------------------+------------------------------------------+------+---------------------+------------+--------+--------+
| 2200000 | ebbf4060e7aa5d1099b8 | 741a7199e189eebba674736397fa49d727c11348 | 2067 | 2022-01-19 23:58:59 | 1630877171 |      4 |      1 |
+---------+----------------------+------------------------------------------+------+---------------------+------------+--------+--------+

-- 客戶端1
mysql> commit;
Query OK, 0 rows affected (0.00 sec)

-- 客戶端2
mysql> select * from test_user where id = 2200000;
+---------+----------------------+------------------------------------------+------+---------------------+------------+--------+--------+
| id      | username             | password                                 | salt | created_at          | updated_at | status | gender |
+---------+----------------------+------------------------------------------+------+---------------------+------------+--------+--------+
| 2200000 | bbb | 741a7199e189eebba674736397fa49d727c11348 | 2067 | 2022-01-19 23:58:59 | 1630877171 |      4 |      1 |
+---------+----------------------+------------------------------------------+------+---------------------+------------+--------+--------+

好吧,正常情況下我們其實(shí)還是保持自動(dòng)提交比較好,真正需要事務(wù)的時(shí)候,直接 BEGIN 開(kāi)啟,然后根據(jù)情況使用 COMMIT 或 ROLLBACK 就好了。

總結(jié)

今天的內(nèi)容我們就是簡(jiǎn)單地回顧一下基礎(chǔ),同時(shí)再演示了一下關(guān)閉 MySQL 中的事務(wù)自動(dòng)提交的效果。相信大家并不過(guò)癮,為啥呢?鼎鼎大名的事務(wù)隔離機(jī)制沒(méi)講呀,別急,這個(gè)我們放到后面再說(shuō),下一回,我們先說(shuō)說(shuō)事務(wù)中可能出現(xiàn)的問(wèn)題,也是非常出名的三個(gè)問(wèn)題,那就是:臟讀、幻讀、不可重復(fù)讀的問(wèn)題。

到此這篇關(guān)于深入理解MySQL事務(wù)特性與自動(dòng)提交的文章就介紹到這了,更多相關(guān)MySQL事務(wù)特性與自動(dòng)提交內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • explain分析sql效率的方法

    explain分析sql效率的方法

    下面小編就為大家?guī)?lái)一篇explain分析sql效率的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • MySQL命令執(zhí)行sql文件的方法小結(jié)

    MySQL命令執(zhí)行sql文件的方法小結(jié)

    本文給大家分享MySQL命令執(zhí)行sql文件的兩種方法,每種方法給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • Mysql主從GTID與binlog如何使用

    Mysql主從GTID與binlog如何使用

    MySQL的GTID和binlog是實(shí)現(xiàn)高效數(shù)據(jù)復(fù)制和恢復(fù)的重要機(jī)制,GTID保證事務(wù)的唯一標(biāo)識(shí),避免復(fù)制沖突;binlog記錄數(shù)據(jù)變更,用于主從復(fù)制和數(shù)據(jù)恢復(fù),兩者配合,提高M(jìn)ySQL復(fù)制的準(zhǔn)確性和管理便捷性
    2024-10-10
  • MySQL操作之JSON數(shù)據(jù)類型操作詳解

    MySQL操作之JSON數(shù)據(jù)類型操作詳解

    這篇文章主要介紹了MySQL操作之JSON數(shù)據(jù)類型操作詳解,內(nèi)容較為詳細(xì),具有收藏價(jià)值,需要的朋友可以參考。
    2017-10-10
  • 關(guān)于MySQL查詢語(yǔ)句的優(yōu)化詳解

    關(guān)于MySQL查詢語(yǔ)句的優(yōu)化詳解

    這篇文章主要介紹了MySQL查詢語(yǔ)句的優(yōu)化方法,分別介紹了子查詢優(yōu)化,分頁(yè)查詢優(yōu)化以及排序查詢優(yōu)化,對(duì)學(xué)習(xí)有一定的幫助,需要的小伙伴可以參考一下
    2023-04-04
  • 解決JDBC的class.forName()問(wèn)題

    解決JDBC的class.forName()問(wèn)題

    這篇文章主要介紹了關(guān)于JDBC的class.forName()問(wèn)題,比較兩個(gè)Java文件可見(jiàn),連接Db2和連接MySQL的方式非常類似,唯一的區(qū)別在于,調(diào)用?DriverManager.getConnection()?方法時(shí),傳入的URL不同,本文給大家詳細(xì)講解,需要的朋友參考下
    2022-09-09
  • DataGrip連接Mysql并創(chuàng)建數(shù)據(jù)庫(kù)的方法實(shí)現(xiàn)

    DataGrip連接Mysql并創(chuàng)建數(shù)據(jù)庫(kù)的方法實(shí)現(xiàn)

    本文主要介紹了DataGrip連接Mysql并創(chuàng)建數(shù)據(jù)庫(kù)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • mysql?復(fù)制行數(shù)據(jù)命令經(jīng)驗(yàn)分享(Mysql?復(fù)制一條數(shù)據(jù))

    mysql?復(fù)制行數(shù)據(jù)命令經(jīng)驗(yàn)分享(Mysql?復(fù)制一條數(shù)據(jù))

    有時(shí)候表里有一行已經(jīng)添加好的數(shù)據(jù),想要多復(fù)制幾百條用來(lái)測(cè)試比如要分頁(yè)測(cè)試等,需要多條數(shù)據(jù),但是有時(shí)候數(shù)據(jù)表字段太多了,有幾十個(gè),一個(gè)一個(gè)手寫那是不可能的
    2023-09-09
  • mySQL之關(guān)鍵字的執(zhí)行優(yōu)先級(jí)講解

    mySQL之關(guān)鍵字的執(zhí)行優(yōu)先級(jí)講解

    這篇文章主要介紹了mySQL之關(guān)鍵字的執(zhí)行優(yōu)先級(jí)講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • MySQL count(*/column)查詢優(yōu)化的實(shí)現(xiàn)

    MySQL count(*/column)查詢優(yōu)化的實(shí)現(xiàn)

    count()是SQL中一個(gè)常用的聚合函數(shù),其被用來(lái)統(tǒng)計(jì)記錄的總數(shù),本文主要介紹了MySQL count(*/column)查詢優(yōu)化的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-09-09

最新評(píng)論