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

相关推荐

  • Openssl搭建私有CA认证

    概述 CA英文全称Certification Authority,即数字证书认机构。从广义上来说,CA是负责发放和管理数字证书的权威机构,并作为用户数字认证中受信任的第三方,承担公钥体系(PKI)中公钥的合法性检验的责任,在互联网上,实现用户与用户、用户与企业之间的数字身份认证。 本文通过使用openssl进行搭建私有CA认证体系,从而简单地了解CA的认证过…

    Linux干货 2016-09-22
  • CentOS6主机启动流程

    CentOS6主机启动流程 流程 一台Linux主机从开机到登录界面提示输入账号密码的时间中进行了好多动作,了解这些动作有助于了解Linux系统的过程,并能够对开机过程出现的故障进行troubleshooting。 主机启动后最先运行的是主板阶段,一旦电源开启,主板进行POST加点自检动作,自检完成后无故障,主板会读取BIOS信息,根据BIOS信息中的Boo…

    Linux干货 2017-05-13
  • 文本处理工具(练习+作业)

    文本处理工具(cut,sort,uniq)练习 1、找出ifconfig命令结果中本机的所有IPv4地址 [root@localhost ~]# ifconfig | tr -cs '[:digit:].' '\n'| sort -t. -k3 |tail -5 2、查出分区空间使用率的最大百分比值 [root@loc…

    Linux干货 2016-08-07
  • 马哥教育网络班22期+第3周课程练习

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。    [test2@localhost ~]$ who |cut -d " " -f1|sort -u   &nbsp…

    Linux干货 2016-08-30
  • 运维练习题

     1、简述TCP三次握手四次挥手过程及各过程中客户端和服务器端的状态。TCP三次握手:客户端向服务器发送SYN包,客户端进入syn_SEND状态服务端收到客户端的发送的包返回ACK+SYN包,服务器端进入SYN_RECV状态客户端收到服务器端返回的包再发ACK包,客户端进入ESTABLISHED状态,服务器收到包也进入ESTABLISHED状态客户…

    Linux干货 2016-06-12
  • MySQL基础知识

    1、SQL:结构化查询语言(Structured Query Language): DDL:Data Definition Language(数据定义语言): 其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询…

    2017-11-20