mysql 锁 ppt_Mysql事务和锁.ppt

锁之间的兼容关系 一致性非锁定读加锁 基于MVCC机制, select操作是在读取undo中历史数据, 因为历史数据不需要修改, 所以不需要加任何锁. Locking reads 一致性锁定读, 不会使用undo日志, 会直接对当前记录加锁. select for update 会加x锁, select lock in share mode 回家s锁. 其他的都相同. 提问 什么场景下, 需要使用select for update 而不是select in share mode? 加锁信息解读 insert加锁 Insert不会自己加锁,而在插入之后,如果还没有提交,此时正好有其它事务做更新或者删除操作了,则这个操作会为这个插入操作加一把锁,然后自己再加一把锁 Insert acts as if locked by itself. Update by primary key 如果要更新的记录存在, 加一把 record lock. 如果记录不存在, 加gap lock. 如果整张表是空的, gap lock锁住(-INF, INF) Update by unique key 如果要更新的记录存在, 在唯一键上有一把行锁, 在主键上有一把行锁 如果记录不存在, 加gap lock. * A: 原子性, 事务执行结果只有两个状态, 要么执行成功, 提交, 要么直接回滚. C: 一致性, 事务将数据库从一种状态转变为下一周一致的状态. 数据库的完整性约束不会被破坏. I: 隔离性, 每个读写事务的对象对其他事务的操作对象相互隔离. 该事物提交前对其他事务不可见, 通常通过锁实现. D: 事务提交后, 结果是永久性的. 及时发生宕机, 数据库也能将数据恢复. 需要强调的一点是, 隔离级别是相对于读来说的. * * 规则是一方面, 但是各个厂商都可以根据自己的情况, 定制化自己的实现. 类似情况还包括, 各种浏览器对html标准的支持, TCP/IP模型()和ISO模型. 应用层, 主机到主机层(TCP)(又称传输层) , 网络层(IP)(又称互联层), 网络接口层(又称链路层) mysql 下面, 如何设置隔离级别: SELECT @@global.tx_isolation; SELECT @@session.tx_isolation; SELECT @@tx_isolation; SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE} * * RR和RC下面, select 对于mvcc使用是不一样的. RR下面, select 一直使用当前事务最开始读到的那个版本, 而在RC下面, 每次select , 为了督导最新提交, 都会去读最新的版本. 做一下实现 题外话, ConcurrentHashMap, CopyOnWriteArrayList 这两个数据结构, 都是类似的设计逻辑, 做到了弱一致性. * 实验: transaction1: set session tx_isolation = 'repeatable-read'; //第二个实验设置成read-committed. begin; select @@session.tx_isolation; select * from test_lock where id = 1; .. commit; transaction2: begin; update test_lock set name_index = 'fangxue' where id = 1; commit; * 锁住primary key 就是锁住了所有字段, 锁住某个secondary index, 就是锁住了那个字段和primary key. * 这里的X锁和S锁, 都是指表锁. 表级锁和行级锁之间, 是不存在冲突或者兼容的概念的. * 测试语句: select * from test_lock; show engine innodb status\G 检查检索信息. * 这两个语句都只能在显式的transaction中才能执行. 测试语句: select * from test_lock where code_index = 'beijing_city' lock in share mode; select * from test_lock where code_index = 'beijing_city' for update; SELECT ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值