MySQL的并发控制-mage

MySQL并发控制

MySQL是一个进程多个线程模型,当并发过来时,就会出现资源争用情况。间接就会产生锁

MySQL锁

读锁: 共享锁,可以让其他读进行,但排斥写锁
写锁: 排他锁,排斥读锁和写锁

  • MySQL server:MySQL本身服务的锁,由人工显示定义
lock table read 读锁
lock table write 写锁
unlock table 解锁
  • MySQL engine: MySQL数据引擎自带的锁,由MySQL自己完成

MySQL事务

MySQL事务: MySQL事务本身一个SQL语句,或者一组SQL,是一个不可切分的原子单元
ACID:
原子性: 任务本身是一个整体,不可切分。事务执行要不成功,要么失败
隔离性:: 事务和事务之间是具有隔离关系。因为当两条事务,同时操作一条语句,就会出现资源争用。所以事务之间要具有隔离关系,但不能完全隔离。为了折中,会有隔离级别
一致性:事务在执行过程中,其中的数据是一致的,不会增加和减少
持久性: 事务一旦执行成功,永久有效

innodb引擎支持MySQL事务,为了保证事务,其引进来undo和redo日志
undo: 做回滚用,记录了事务执行前数据库中数据状态,当事务执行过程中,数据库意外停止。当再次启动时,会读取undo里面日志进行事务回滚。undo相当于数据的一次快照
redo:记录每条事务的执行记录,以及事务在执行之前,这条数据的状态。用来保证事务的一致性。redo的日志是在磁盘上一段连续的空间,对数据库的操作,会先写在redo上,然后又redo再在MySQL上的表执行

MySQL隔离级别:用来保证事务的隔离性
ru读未提交: 可以读到还没有提交的事务,即出现脏读
rc读以提交: 读到已经提交的事务,不可重复读,重复读可能会出现结果不一致的情况
rr可重复读: 可以重复读,但是自己骗自己,当双方都开始事务,一方修改数据,并提交。另一方在查询该数据,在对方事务期间和提交事务,另一方都会查到之前的数据。当自己提交事务后,就会查到最新数据。即幻读
串行化读: 即一个事务完毕,另一个读取之前事务的数据的事务,才开始执行。但对数据库性能影响很大
注:以上隔离级别出现的错误,都是在两个事务在操作同一个资源时出现

MySQL修改参数

  • MySQL全局参数
    全局参数修改,只针对以后连进来的线程生效
  • MySQL的当前session的参数
    及时生效,但只针对当前的线程
  • MySQL内嵌了计数器,来记录其运行状态mysql status

你可能感兴趣的:(MySQL的并发控制-mage)