mysql 锁 事物 小结



锁兼容性:仅当请求锁的模式与现有锁的模式相兼容时,才会授予新的锁请求。如果请求锁的模式与现有锁的模式不兼容,则请求新锁的事务将等待释放现有锁或等待锁超时间隔过期

一、MyISAM表锁

1、MyISAM存储引擎只支持表锁

2、MySQL的表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。

3、MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预。

4、锁模式兼容性列表

				当前锁模式
		是否兼容		
请求锁模式					
			None	读锁	写锁
读锁		是		是		否
写锁		是		否		否

5、MyISAM存储引擎的读锁和写锁是互斥的,读写操作是串行的。那么,一个进程请求某个MyISAM表的读锁,同时另一个进程也请求同一表的写锁,MySQL如何处理呢?答案是写进程先获得锁。不仅如此,即使读请求先到锁等待队列,写请求后到,写锁也会插到读锁请求之前!这是因为MySQL认为写请求一般比读请求要重要

二、InnoDB行锁

1、InnoDB实现了以下两种类型的行锁:共享锁(S),排他锁(X);

2、InnoDB还有两种内部使用的意向锁(Intention Locks),这两种意向锁都是表锁:意向共享锁(IS),意向排他锁(IX)

3、意向锁是InnoDB自动加的,不需用户干预。

4、对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁(X);
对于普通SELECT语句,InnoDB不会加任何锁!

5、共享锁(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE;
排他锁(X):SELECT * FROM table_name WHERE ... FOR UPDATE。

6、锁模式兼容性列表
				请求锁模式
		是否兼容
当前锁模式
		X		IX		S		IS
X		冲突	冲突	冲突	冲突
IX		冲突	兼容	冲突	兼容
S		冲突	冲突	兼容	兼容
IS		冲突	兼容	兼容	兼容


7、InnoDB行锁是通过给索引上的索引项加锁来实现的,所以只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!

8、由于MySQL的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但是如果是使用相同的索引键,是会出现锁冲突的。

9、检索值的数据类型与索引字段不同,虽然MySQL能够进行数据类型转换,但却不会使用索引。

10、间隙锁针对幻读。

MySQL事物

1、autocommit自动提交模式:表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行。
2、查询show variables like 'autocommit';
值0和OFF都是一样的:关闭当前会话中事务的自动提交,需要手动 commit 或者 rollback;
1也就表示ON:默认 autocommit = 1,每一次 sql 操作都被认为是一个单次的事务,被隐式提交。

3、start transaction;挂起 autocommit 的状态。

挂起 autocommit 的意思是保存 autocommit 的当前状态,然后 start transaction,直到 commit or rollback 结束本次事务,再恢复之前挂起的 autocommit 的状态

如果 start transaction 前 autocommit = 1,则完成本次事务后 autocommit 还是 1

如果 start transaction 前 autocommit = 0,则完成本次事务后 autocommit 还是 0,接下来的操作你仍需手动 commit 才可以提交。


参考文献:

http://blog.csdn.net/mysteryhaohao/article/details/51669741

https://my.oschina.net/sallency/blog/785476

转载于:https://my.oschina.net/simaguo/blog/887080

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值