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 19:19
下一篇 2016-11-18 19:25

相关推荐

  • Redis 3.0.0正式版发布,全新的分布式高可用数据库

    Redis 3.0.0 正式版终于到来了!最重要的新特性是集群(Redis Cluster),提供Redis功能子集(比如不支持多数据库)的分布式、容错的实现(最多支持1000结点)。   Salvatore 'antirez' Sanfilippo在Google Groups里表示,这是Redis的重要时刻。“我相信今天的Redis 3.0…

    Linux干货 2015-04-03
  • 马哥教育千万级PV实战大揭秘

    又到了激动人心的架构实战项目实践时间,马哥教育面授班的学员都很期待这一刻的到来,因为经过此次洗礼,能让自己成长更多! 上周二,马哥教育张Sir带领18期面授班的学员们做千万PV级别的电商架构实战项目!新增的多台R710企业级服务器设备,轻松搭建大数据、云计算等高端实验环境,让实战,更加真实!相信经过这场实战的洗礼,小伙伴们架构技能会有更大提升! 【张Sir生…

    2016-06-30
  • 马哥教育网络20期+第二周练习博客

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。 3、请使用命令行展开功能来完成以下练习:    (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d   …

    Linux干货 2016-06-20
  • 详解“FTP文件传输服务”配置实例

            详解“FTP文件传输服务”配置实例 目录 简介 ftp工作原理 常见的FTP服务 Vsftpd服务器的安装 Vsftpd.conf配置文件详解 配置FTP服务器实例 实例:配置匿名 实例:配置本地用户登录 实例:配置虚拟用户登录(MySQL认证) 实例:控制用户登…

    Linux干货 2016-10-18
  • 变量、脚本、条件测试

    一、编程基础   程序:指令+数据  计算机:运行二进制指令 程序编程风格:  过程式:以指令为中心,数据服务于指令  对象式:以数据为中心,指令服务于数据shell程序:提供了编程能力,解释执行编程语言:  编译:高级语言–>编译器–>目标代码  解释:高级语言…

    Linux干货 2016-08-15
  • ansible配置与应用

    无法上传图片 一、程序主要文件: ansible ansible-playbook ansible-doc 二、程序发布: 要求: 1.不能影响用户体验 2.系统不能停机 3.不能导致系统故障或造成系统完全不可用。 发布路径: /webapps/tuangou /webapps/tuangou-1.1 /webapps/tuangou-1.2. 在调度器上下…

    Linux干货 2016-11-14