mysql中的锁

1.锁的概念

  

2.锁的分类

  

二:表锁

1.对表加锁

  lock table xxxx read

  lock table yyyy write

2.解锁

  unlock tables

3.是否加锁

  show open tables

4.加上读锁

  当前连接:

    可以读

    不能更新

    不能读其他的表

  另外的窗口:   

    可以读

    不能更新

    可以读其他的表

5.写锁

  当前连接:

    可以读

    可以写

    不能读取别的表

  另外的窗口连接:

    不能读

    不能写

    能读取其他的表

三:行锁

1.事务

  ACID属性

  并发事务处理带来的问题

  事务的隔离级别

  查看隔离级别

  设置隔离级别

2.ACID

  A:atomicity:原子性,要是全部失败,要么全部成功

  C:consistency:操作前后的数据一致性,合理性

  I:isolation:多个并发会不干扰

  D:durability:一旦提交了,就不能回滚了

3.并发处理出现的问题

  更新丢失:两个或者多个事务选择一行进行处理,由于不知道其他的事务存在,最后的更新覆盖了其他事务的更新

  脏读:老板发工资的例子,多给了,然后员工马上看到了,但是老板突然发现给多了,又取消了,老板又重新修改了,到手的还是正常的,但是员工一开始看到的是没有提交的事务数据,将隔离级别调整为读提交,就可以解决

  不可重复读:员工买东西的例子,员工去买东西了,检测到里面有钱,然后这个时候,钱被家人给取出来了,然后收费系统开始扣钱的时候,又发现钱没有了。一个事务内,两次查询到不同的数据。解决方式,重复读级别。

  重复读:这不是一个问题

  幻读:查岗例子,家人检查今天员工的消费,发现是2000的消费。然后员工又进行了一笔消费3000,并提交了。然后,家人对着消费清单进行打印,则发现打印出来5000。解决方式是串行化 

  

4.行锁操作

  执行更新操作:

    自己可以查看自己更新的内容

    连接2看不到更新的内容,只有1完成提交才能看到

  同时更新一行数据:

    1没有提交,2则进行阻塞

  同时更新数据,但是不是同一样:

    互不影响

5.索引失败,行锁变表锁

   

6.间隙锁

update employee set name = '0000' where id>3 and id<7

  然后

  如果进行更新的时候,id在3和7之间的数据,会被加锁

 

四:行锁与表锁的区别

1.区别

  开销:表锁的开销小

  并发度:表锁的并发底

  锁定粒度:表锁的粒度大

  冲突:表锁的冲突高

  加锁快慢:表锁的的加锁快

原文地址:https://www.cnblogs.com/juncaoit/p/13378903.html