mysql 锁

msyql 锁

读锁
写锁

锁的粒度:Innodb 到行,MyIsam 到表

查看当前表是否加锁:

show open tables;

给指定表orders 和order_details 分别加读锁和写锁:

lock table orders read, order_details write

解锁所有表:

unlock tables;

总而言之,读锁会阻塞写,但是不会堵塞读,而写锁则会把读和写都阻塞

InnoDB:
事务(ACID)
原子性:atomicity 事务是一个原子操作单元,其对数据的修改,要么全部执行,要么全部不执行
一致性:Consistent 在事务开始和完成,数据都必须保持一致的状态。
隔离性:Isolation 对数据库系统提供一定的隔离机制,保证事务在不受外部并发操作的影响“独立”环境的运行,这个就意味着事务处理的中间状态对外部是不可见的,反之亦然。
持久性:Druable 事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持

事务
原子性:数据的修改,要么全部执行,要么不执行
一致性: 事务的开始和完成,数据都保持一致的状态
隔离性:事务处理的中间状态对外部不可见
持久性:事务完成之后,对数据的修改是永久性的

脏读:一个事务对一条记录做了修改,在这个事务完成和提交之前,这条记录数据处于一个不一致的状态,这时另外一个事务也读取到这条记录,如果不加控制,第二个事务就会读取到脏数据,并据此数据做进一步处理,就会产生未提交的数据依赖关系,这种现象就是脏读。
一句话:事务A读到了事务B的修改未提交的数据,在此数据的基础做了操作,此时如果事务B事务回滚,A读取的数据无效,不符合事务的一致性。

不可重复读:一个事务在读取数据后的某些时间,又一次的重复读该数据,发现此数据已经更改,或者删除,这种现象叫做“”不可以重复读“”
事务A读到事务B已经提交修改过的数据,不符合隔离性。

幻读:事务A读取到事务B新增的数据,不符合隔离性
脏读:事务A读取到事务B修改的数据,不符合隔离性

查看事务隔离级别:
show variables like “tx_isolation”
关闭事务自动提交:
set autocommit = 0
开启事务制动提交
set autocommit = 1

事务的隔离级别:
未提交读:read uncommited
已提交读:read commited
可重复读:repeatable read (my sql默认的隔离级别)解决了脏读和不可重复读。
可序列化:serializble

索引使用不当,会失效,也有可能行锁变为表锁

间隙锁:如果使用范围查询而不是采用等值查询,mysql会锁定这个范围内的所有索引的值,及时这个键值不存在也会被锁定,而造成在锁定的时候无法插入锁定键值范围内的任何数据,而在某些应用场景下会对性能造成很大的危害。

如何分析行锁?

show status like "%innodb_row_lock%"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值