并發控制:
鎖:Lock
1、鎖類型 :
讀鎖:共享鎖,可被多個讀操作共享;
寫鎖:排它鎖,獨占鎖;
2、鎖粒度:
表鎖:在表級別施加鎖,并發性較低;
行鎖:在行級另施加鎖,并發性較高;
3、鎖策略:在鎖粒度及數據安全性之間尋求一種平衡機制;
存儲引擎:級別以及何時施加或釋放鎖由存儲引擎自行決定;
MySQL Server:表級別,可自行決定,也允許顯式請求;
4、鎖類別:
顯式鎖:用戶手動請求的鎖;
隱式鎖:存儲引擎自行根據需要施加的鎖;
5、顯式鎖的使用:
(1) LOCK TABLES
LOCK TABLES tbl_name read|write, tbl_name read|write, ...
UNLOCK TABLES; #釋放鎖
Lock
讀鎖:共享鎖,可被多個讀操作共享;
寫鎖:排它鎖,獨占鎖;
表鎖:在表級別施加鎖,并發性較低;
行鎖:在行級另施加鎖,并發性較高;
存儲引擎:級別以及何時施加或釋放鎖由存儲引擎自行決定;
MySQL Server:表級別,可自行決定,也允許顯式請求;
顯式鎖:用戶手動請求的鎖;
隱式鎖:存儲引擎自行根據需要施加的鎖;
(1) LOCK TABLES
LOCK TABLES tbl_name read|write, tbl_name read|write, ...
UNLOCK TABLES; #釋放鎖
如果是寫鎖就任何鎖都被阻塞
(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
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