mysql 并发处理


  • 并发处理 
  • 当多个连接对记录进行修改时保证数据的一致性和完整性

  • 为什么要用到并发控制
  • 假设我们的数据库中存在着商品的记录,现在有两个用户进行登陆,假设一个用户要删除id为22的记录,一个用户要读取id为22的记录,那么会发生什么样的结果呢,结果可能是正在读取信息的用户报错而退出,也可能是他会得到一条和实际信息不符的信息。

  • 怎么 处理并发问题 
  • 在处理并发读和并发写的时候,系统会使用一套锁系统来解决这个问题

  • 什么是锁系统 
  • 锁系统由两类锁来组成 
  • 共享锁(读锁) 
    读锁是共享的互不阻塞的,在同一段时间内,多个用户可以读取同一个资源,读取过程中数据不会发生任何变化
  • 排它锁(写锁) 
    写锁是排他的,在任何时候都只能有一个用户写入资源,当进行写锁时会阻塞其它的读锁或者写锁操作

  • 锁的粒度
  • 锁的粒度就是mysql锁定时的单位,根据单位可以分为两种
  • 表锁,是一种开销最小的锁策略。使用户得到数据表的写锁(禁止其他用户进行读写,只有一个锁,锁定了整张表) 
    当锁为表锁时,一个用户访问了一张表,那么其它用户都不能访问这张表
  • 行锁,是一种开销最大的锁策略。使用户得到特定行的写锁,并行性最大(有多少条记录,就可能对多少条记录进行了行锁) 
    当锁为行锁时,用户访问数据表的特定行,比如第一行,那么第一行就不能被其它用户访问,其它用户只能访问除了第一行以外的行