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.178linux.com/59642

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

相关推荐

  • TCP和ARP

    TCP是一个工作在传输层,面向连接的协议,一台计算机与另一台计算机通信就需要TCP协议,当然还有一个和它并列的一个协议可以使用,只是TCP更加稳定且常用. 上图为一台计算机与另一台计算机建立通讯的过程,它实际通信中传递的不止斜线上的信息.上面的SYN是同步号, ACK为确认号.seq为序列号,ack为辅助的确认号 上面为建立通信时发送的TCP信息详细结构,i…

    Linux干货 2017-11-29
  • linux基础命令

            转眼已经过了一周,在南老师的悉心指导下,我学会了一些基础的LINUX命令,下面做一下本周小结。 命令1:tty、who am i、whoami、w 作用:查看当前登录信息            终端传递信息 echo hello &g…

    Linux干货 2017-07-15
  • Linux中的文件管理命令及shell特性

    Linux中的文件管理命令 一、linux中的目录管理命令:mkdir和rmdir mkdir命令:创建目录 – SYNOPSIS         mkdir [OPTION]… DIRECTORY…     -…

    Linux干货 2016-09-27
  • centos进程管理

    一 、进程的概念和分类1.进程的概念      Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用同一个linux系统;多任务是指在Linux下可以同时执行多个任务,更详细的说,linux采用了分时管理的方法,所有的任务都放在一个队列中,操作系统根据每个任务的优先级为每个任务分配合适…

    Linux干货 2016-09-19
  • 文件压缩与归档工具

          1、compress/uncompress  .Z 格式                  compress [-d…

    Linux干货 2016-08-22
  • 逻辑卷实战演练

    1、创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录 2、新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录 3、扩展testlv…

    Linux干货 2016-09-01