最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL系列之十 MySQL事務隔離實現(xiàn)并發(fā)控制

 更新時間:2021年07月02日 16:13:40   作者:生生不息.連綿不絕  
今天的內容就和大家聊一聊MySQL數(shù)據(jù)庫中關于MySQL事務隔離實現(xiàn)并發(fā)控制的問題,主要是基于鎖實現(xiàn)控制技術

一、并發(fā)訪問控制

實現(xiàn)的并發(fā)訪問的控制技術是基于鎖;

鎖分為表級鎖和行級鎖,MyISAM存儲引擎不支持行級鎖;InnoDB支持表級鎖和行級鎖;

鎖的分類有讀鎖和寫鎖,讀鎖也被稱為共享鎖,加讀鎖的時候其他的人可以讀;寫鎖也稱為獨占鎖或排它鎖,一個寫鎖會阻塞其他讀操作和寫操作;

鎖還分為隱式鎖和顯式鎖,隱式鎖由存儲引擎自行管理,顯式鎖是用戶手動添加鎖;

鎖策略:在鎖粒度及數(shù)據(jù)安全性尋求的平衡機制。

顯式鎖的使用方法:LOCK TABLES tbl_name READ|WRITE

MariaDB [school]> LOCK TABLES students READ;  #加讀鎖
MariaDB [school]> UNLOCK TABLES;  #解鎖

讀鎖:任何人都不可寫

寫鎖:自己可以讀寫,但是其他人不可讀寫

FLUSH TABLES tb_name :關閉正在打開的表(清除查詢緩存),通常在備份前加全局讀鎖

SELECT clause [FOR UPDATE | LOCK IN SHARE MODE] 查詢時加寫或讀鎖

二、事務Transactions

​一組原子性的SQL語句,或一個獨立工作單元

1、事務遵循ACID原則:

  • A:atomicity原子性;整個事務中的所有操作要么全部成功執(zhí)行,要么全部失敗后回滾
  • C:consistency一致性;數(shù)據(jù)庫總是從一個一致性狀態(tài)轉換為另一個一致性狀態(tài)
  • I:Isolation隔離性;一個事務所做出的操作在提交之前,是不能為其它事務所見;隔離有多種隔離級別,實現(xiàn)并發(fā)
  • D:durability持久性;一旦事務提交,其所做的修改會永久保存于數(shù)據(jù)庫中

2、事務的生命周期

顯式事務:明確的規(guī)定事務的開始

隱式事務:默認為隱式事務,每執(zhí)行完一句語句后直接提交

autocommit = {OFF|ON} 開啟或關閉自動提交,建議使用顯式請求和提交事務,而不要使用“自動提交”功能

啟動事務:START TRANSACTION;

插入標簽:ROLLBACK TO ##;

撤銷回指定標簽:ROLLBACK TO ##;

全部撤銷:ROLLBACK;

提交事務:COMMIT;

刪除標簽:RELEASE SAVEPOINT;

MariaDB [school]> START TRANSACTION;  #明確指明啟動一個事務
MariaDB [school]> INSERT students(StuID,Name,Age,Gender) VALUES (26,'Tom',22,'M');  #添加一條記錄
MariaDB [school]> SAVEPOINT sp26;  #插入一個標簽
MariaDB [school]> INSERT students(StuID,Name,Age,Gender) VALUES (27,'Maria',12,'F');  #再加入一條記錄
MariaDB [school]> SELECT * FROM students WHERE stuid IN (26,27);  #查看一下,可以看到剛剛插入的數(shù)據(jù)
+-------+-------+-----+--------+---------+-----------+
| StuID | Name  | Age | Gender | ClassID | TeacherID |
+-------+-------+-----+--------+---------+-----------+
|    26 | Tom   |  22 | M      |    NULL |      NULL |
|    27 | Maria |  12 | F      |    NULL |      NULL |
+-------+-------+-----+--------+---------+-----------+
MariaDB [school]> ROLLBACK TO sp26;  #撤銷到sp26標簽之前的狀態(tài)
MariaDB [school]> SELECT * FROM students WHERE stuid IN (26,27);  #查看一下,剛剛maria的信息被撤回了
+-------+------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+------+-----+--------+---------+-----------+
|    26 | Tom  |  22 | M      |    NULL |      NULL |
+-------+------+-----+--------+---------+-----------+
MariaDB [school]> COMMIT;  #提交事務
MariaDB [school]> SELECT * FROM students WHERE stuid IN (26,27);  #最終的數(shù)據(jù)
+-------+------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+------+-----+--------+---------+-----------+
|    26 | Tom  |  22 | M      |    NULL |      NULL |
+-------+------+-----+--------+---------+-----------+

3、事務的隔離級別

  • READ UNCOMMITTED 其他事務可以看到未提交的臟數(shù)據(jù),產生臟讀
  • READ COMMITTED 提交后其他事務可以看到修改后的數(shù)據(jù),每次讀取的數(shù)據(jù)可能不一致,不可重復讀
  • REPEATABLE READ 可重復讀,每次看到的數(shù)據(jù)都一致,數(shù)據(jù)被修改后看不到最新數(shù)據(jù),會產生幻讀(默認設置)
  • SETIALIZABILE 未提交的讀事務阻塞修改事務,串行執(zhí)行,并發(fā)性差

MVCC: 多版本并發(fā)控制,和事務級別相關

修改事務隔離級別:服務器變量tx_isolation指定,默認為REPEATABLE-READ,可在GLOBAL和SESSION級進行設置

tx_isolation

  • Description: The transaction isolation level. See also SET TRANSACTION ISOLATION LEVEL.
  • Commandline: --transaction-isolation=name
  • Scope: Global, Session
  • Dynamic: Yes
  • Type: enumeration
  • Default Value: REPEATABLE-READ
  • Valid Values: READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE
MariaDB [school]> SELECT @@tx_isolation;   #默認為可重復讀級別
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
MariaDB [school]> SET tx_isolation='READ-UNCOMMITTED';
MariaDB [school]> set tx_isolation='READ-COMMITTED';
MariaDB [school]> set tx_isolation='REPEATABLE-READ';
MariaDB [school]> set tx_isolation='SERIALIZABLE';

4、死鎖

​兩個或多個事務在同一資源相互占用,并請求鎖定對方占用的資源的狀態(tài)會發(fā)生死鎖

在A事務修改t1表的第3行,B事務修改t2表的第2行時;這時A事務去修改t2表的第2行,這時就把A事務阻塞了,然后B事務有剛剛好去修改t1表的第3行,這時B事務也被阻塞了,這時就產生了死鎖。

倆個事務同時去更改對方的修改的表,互相阻塞;系統(tǒng)會發(fā)現(xiàn)死鎖,會自動犧牲一個代價小的事務來解開死鎖。

ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

查看進程列表:MariaDB [school]> SHOW PROCESSLIST;

殺死進程:MariaDB [school]> KILL 5;

到此這篇關于MySQL系列之十 MySQL事務隔離實現(xiàn)并發(fā)控制的文章就介紹到這了,更多相關mysql并發(fā)控制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

到此這篇關于MySQL系列之十 MySQL事務隔離實現(xiàn)并發(fā)控制的文章就介紹到這了,更多相關mysql并發(fā)控制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL Explain使用詳解

    MySQL Explain使用詳解

    這篇文章主要介紹了MySQL Explain使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • 探索MySQL?8中utf8mb4釋放多語言數(shù)據(jù)的強大潛力

    探索MySQL?8中utf8mb4釋放多語言數(shù)據(jù)的強大潛力

    這篇文章主要為大家介紹了探索MySQL?8中utf8mb4釋放多語言數(shù)據(jù)的強大潛力,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 基于MySQL架構圖解

    基于MySQL架構圖解

    這篇文章主要介紹了基于MySQL架構圖解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • CentOS 安裝redis和MySQL

    CentOS 安裝redis和MySQL

    這篇文章主要介紹了CentOS 安裝redis和MySQL的相關資料,需要的朋友可以參考下
    2019-08-08
  • 教你如何通過日志文件恢復MySQL數(shù)據(jù)

    教你如何通過日志文件恢復MySQL數(shù)據(jù)

    Binlog日志是二進制日志文件,有兩個作用,一個是增量備份,另一個是主從復制,即主節(jié)點維護一個binlog日志文件,從節(jié)點從binlog中同步數(shù)據(jù),也可以通過binlog日志來恢復數(shù)據(jù),這篇文章主要給大家介紹了關于如何通過日志文件恢復MySQL數(shù)據(jù)的相關資料,需要的朋友可以參考下
    2022-02-02
  • Mysql5.7.18的安裝與主從復制圖文詳解

    Mysql5.7.18的安裝與主從復制圖文詳解

    這篇文章主要介紹了Mysql5.7.18的安裝與主從復制圖文詳解,需要的朋友可以參考下
    2017-08-08
  • mysql字段為NULL索引是否會失效實例詳解

    mysql字段為NULL索引是否會失效實例詳解

    有很多人對null值是否走索引感覺很疑惑,所以下面這篇文章主要給大家介紹了關于mysql字段為NULL索引是否會失效的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • SQL HAVING子句在GROUP BY中的條件篩選靈活運用

    SQL HAVING子句在GROUP BY中的條件篩選靈活運用

    這篇文章主要為大家介紹了SQL HAVING子句在GROUP BY中的條件篩選靈活運用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • mysql5.7.25使用全文檢索功能的實例教程

    mysql5.7.25使用全文檢索功能的實例教程

    其實全文檢索在MySQL里面很早就支持了,下面這篇文章主要給大家介紹了關于mysql5.7.25使用全文檢索功能的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • Mysql 下中文亂碼的問題解決方法總結

    Mysql 下中文亂碼的問題解決方法總結

    這篇文章主要介紹了Mysql 下中文亂碼的問題解決方法總結的相關資料,這里提供了解決 Mysql 中文亂碼問題的辦法,需要的朋友可以參考下
    2016-11-11

最新評論

彩票| 广饶县| 星子县| 农安县| 前郭尔| 安庆市| 台南市| 孟津县| 广水市| 环江| 自治县| 两当县| 乌拉特中旗| 平江县| 剑阁县| 聂拉木县| 长汀县| 秭归县| 藁城市| 定襄县| 胶州市| 舟山市| 光泽县| 抚远县| 河西区| 大新县| 上犹县| 广丰县| 宜宾县| 鄂托克旗| 常山县| 延川县| 江口县| 林口县| 莱芜市| 中卫市| 七台河市| 永胜县| 商洛市| 时尚| 灵丘县|