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

相关推荐

  • 马哥教育网络班20期+第一周课程练习

    一、计算机的组成及其功能。 计算机是由几个单元所组成,输入单元,输出单元,运算器,控制器,存储器,5大单元组成  1、运算器 又称运算器又称算术逻辑单元,它是计算机对数据进行加工处理的部件,包括算术运算(加、减、乘、除等)和逻辑运算(与、或、非、异或、比较等)。 2、控制器 负责从存储器中取出指令,并对指令进行译码;根据指令的要求,按时间的先后顺序…

    Linux干货 2016-06-23
  • 实验:yum、编译安装、swap

    实验:在centos7实现光盘yum源 1yum install autofs 2现在启动systemctl start autofs 3开机启动systemctl enable autofs 4 cat /etc/yum.repos.d/base.repo[centos7]name=centos7 repobaseurl=file:///misc/cdgp…

    Linux干货 2017-04-25
  • 马哥教育网络班22期+第3周课程练习

    1、列出系统上所有已登陆的用户的用户名,注意:同一个用户登录多次,只显示一次即可。     who | cut -d' ' -f1 | uniq 2、取出最后登录到当前系统的用户的相关信息;    &…

    Linux干货 2016-09-26
  • 在Centos7上源码编译httpd

    在Centos7上源码编译httpd 安装源码包 首先在http://httpd.apache.org下载所需要的安装包 小编在这里下载的是httpd-2.4.27.tar apr-1.6.2.tar apr-util-1.6.0.tar 首先编译安装apr-1.6.2.tar.gz #1 tar -zxf apr-1.6.2.tar.gz #先解压安装包 …

    2017-08-21
  • 计算机硬件及Linux简介

    计算机的组成 计算机主要分成五大部分:输入单元、控制单元、运算单元、存储器、输出单元。 其中,中央处理器(CPU)是一个具有特定功能的芯片,含有微指令集。包括控制单元与运算单元。 控制单元对程序进行控制,调度程序、数据、地址。运算单元负责对数据的各种逻辑运算和数字运算。 计算机的功能 包括但不限于 驱动程序:字面意思。 进程管理:计算机内部能够通过分配资源,…

    Linux干货 2016-10-30
  • Linux进程管理及作业管理

    进程管理 进程概念 Linux内核:抢占式多任务 内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等 Process: 运行中的程序的一个副本,是被载入内存的一个指令集合 进程ID(Process ID,PID)号码被用来标记各个进程 UID、GID、和SELinux语境决定对文件系统的存取和访问权限 通常从执行进程的用户来继承 进程存…

    Linux干货 2017-05-08