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

相关推荐

  • Linux 用户, 组和权限

    用户, 组和权限 Linux登陆需要用户名、密码。/etc/passwd 文件保存用户名。登录linux时,Linux 先查找 /etc/passwd 文件中是否有这个用户名,没有则跳出,有则读取用户名的user ID 、 group ID 、用户名对应的根目录路径以及所使用的 shell ,最后在 /etc/shadow 中核对该 UI…

    2017-07-22
  • iptables实验2

    IPTABLES   实验2       实验大体结构图       相关概念及公式 源地址转换:    SNAT   POSTROUTING 目标地址转换:DNAT  PREROUTING   每次重启网络后…

    Linux干货 2016-10-24
  • N21沉舟11周作业

    1、详细描述一次加密通讯的过程,结合图示最佳。 2、描述创建私有CA的过程,以及为客户端发来的证书请求进行办法证书。 一、CA服务器端 #进入CA目录:cd    /etc/pki/CA #创建初始文件touch index.txt serialecho 01 >&nbsp…

    Linux干货 2016-09-19
  • Homework Week-7 RAID及bash编程

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;    (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; fdisk /dev/sda n …

    Linux干货 2016-09-26
  • 为大家准备了几道简单的小题,不知道看过这篇文章后能否做出来?(考验你能力的时候到了,接招吧。。。) 1、将0-9分别替代成a-j 2、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中 3、计算1+2+3+..+99+100的值 4、处理字符串“xt.,l 1 jr#!$mn2 c*/fe 3 uz 4”,只保留其中的数字…

    2017-07-22