并发控制:
锁: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.178linux.com/59642