mysql并發控制

并發控制:

鎖:Lock

1、鎖類型 :

讀鎖:共享鎖,可被多個讀操作共享;
寫鎖:排它鎖,獨占鎖;

2、鎖粒度:

表鎖:在表級別施加鎖,并發性較低;
行鎖:在行級另施加鎖,并發性較高;

3、鎖策略:在鎖粒度及數據安全性之間尋求一種平衡機制;

存儲引擎:級別以及何時施加或釋放鎖由存儲引擎自行決定;
MySQL Server:表級別,可自行決定,也允許顯式請求; 

4、鎖類別:

顯式鎖:用戶手動請求的鎖;
隱式鎖:存儲引擎自行根據需要施加的鎖;

5、顯式鎖的使用:

(1) LOCK TABLES 

    LOCK TABLES  tbl_name  read|write, tbl_name read|write, ...

    UNLOCK TABLES; #釋放鎖

mysql并發控制

mysql并發控制

如果是寫鎖就任何鎖都被阻塞

(2) FLUSH TABLES:內存中的數據同步內存到磁盤上,并關閉表,或者施加鎖之后打開
    FLUSH TABLES tbl_name,... [WITH READ LOCK];

    UNLOCK TABLES;

    可以直接  FLUSH TABLES WITH 。。。 LOCK
        同步所有的表,并施加鎖

(3) SELECT cluase :鎖定某些行
    [FOR UPDATE | LOCK IN SHARE MODE                

事務:

事務:一組原子性的SQL查詢、或者是一個或多個SQL語句組成的獨立工作單元;

事務日志:

innodb_log_files_in_group
innodb_log_group_home_dir
innodb_log_file_size    
innodb_mirrored_log_groups

mysql并發控制

ACID測試:

A:AUTOMICITY,原子性;整個事務中的所有操作要么全部成功執行,要么全部失敗后回滾;
C:CONSISTENCY,一至性;數據庫總是應該從一個一致性狀態轉為另一個一致性狀態; 
I:ISOLATION,隔離性;一個事務所做出的操作在提交之前,是否能為其它事務可見;出于保證并發操作之目的,隔離有多種級別; 
D:DURABILITY,持久性;事務一旦提交,其所做出的修改會永久保存;

自動提交:單語句事務

mysql> SELECT @@autocommit;

+------------------------+
| @@autocommit |
+------------------------+
|            1               |
+------------------------+

mysql> SET @@session.autocommit=0;

手動控制事務:

  • 啟動START TRANSACTION
  • 提交COMMIT
  • 回滾ROLLBACK

這種事物的回滾等操作需要存儲,就需要事務的支持

事務支持savepoints:

SAVEPOINT identifier

ROLLBACK [WORK] TO [SAVEPOINT] identifier

RELEASE SAVEPOINT identifier        

事務日志

事務日志就是把隨機IO轉換成一次大量讀寫的操作,即把所有的操作存儲在連續的空間中,當我們提交時就要保證所有的執行操作都存儲在事務日志文件中了,然后再通過mysql的線程默認同步到數據區去。
所以我們一般不要讓事務日志和數據存儲在同一個磁盤中。
事務日志是由兩個以上文件輪替使用,當第一個被填滿,就換上另一個。然后同步第一個。mysql支持事務日志的鏡像!

事務日志所在文件 /var/lib/mysql/

-rw-rw---- 1 mysql mysql 5.0M Nov 13 07:07 ib_logfile0
-rw-rw---- 1 mysql mysql 5.0M Nov 13 07:07 ib_logfile1

和事務相關的配置

事務隔離級別:

READ-UNCOMMITTED:讀未提交 --> 臟讀;
READ-COMMITTED:讀提交--> 不可重復讀;
REPEATABLE-READ:可重復讀 --> 幻讀;
SERIALIZABLE:串行化;

mysql> SELECT @@session.tx_isolation;
        +----------------------------------+
        | @@session.tx_isolation |
        +----------------------------------+
        | REPEATABLE-READ         |
        +----------------------------------+

    查看InnoDB存儲引擎的狀態信息:
        SHOW ENGINE innodb STATUS; 

原創文章,作者:qzx,如若轉載,請注明出處:http://www.www58058.com/59642

(0)
qzxqzx
上一篇 2016-11-18
下一篇 2016-11-18

相關推薦

  • 一.Liunx博客-2016年7月19日文件系統類型、分區類型

    格式說明: 操作 概念 命令 說明及舉例 一.文件系統類型、分區類型 轉換磁盤文件系統命令 convert e: /fs:ntfs su – root 切換到root用戶 linux根 /windows根 \ cd \ home:用戶root:usr:tmp:臨時文件dev:硬件設備 IDE /dev/hda…

    Linux干貨 2016-08-23
  • Linux-文件系統掛載:mount的用法

     文件系統掛載  本章詳細介紹文件系統掛載、卸載(mount,umount);  如何通過mount命令掛載使用文件系統、掛載常用參數、以及開機自動掛載(/etc/fstab)。    掛載描述:             掛載:將額外文件系…

    2017-06-19
  • 文件查找和壓縮

    文件查找     在文件系統上查找符合條件的文件;       文件查找:locate, find        非實時查找( 數據庫查找) :locate        實時查找:find locate &n…

    Linux干貨 2016-08-18
  • 第六周作業-Vim總結

                    Vim總結 vim功能比較多,這里我不總結vim多窗口,只對基本常用的介紹. 一.模式說明 vim和記事本或WORD不一樣,不是一打開后就可以輸入文字,此時它處于正常?!?/p>

    Linux干貨 2017-01-16
  • MariaDB數據類型總結

        數據類型是數據的一種屬性,它決定了數據的存儲格式、有效范圍及其它相應的限制。MariaDB的數據類型包括:字符型、整型、浮點值、日期時間型、布爾型及內建類型。 一、字符型     1、CHAR和VARCHAR類型     &nbsp…

    Linux干貨 2015-06-30
  • Linux用戶和組管理及相關命令詳解

        概要:在學習Linux的初級階段,用戶管理是基礎管理的重要部分,任何命令的運行,系統的正常運轉,均離不開用戶管理的內容,本篇就為大家介紹下Linux用戶管理的一些基礎概念和一些基礎命令的用法。內容主要分為以下三個部分:        &nbs…

    Linux干貨 2016-08-02
欧美性久久久久