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.区别
开销:表锁的开销小
并发度:表锁的并发底
锁定粒度:表锁的粒度大
冲突:表锁的冲突高
加锁快慢:表锁的的加锁快