mysql进阶项目_数据库进阶(MySQL进阶)6

十四:MySQL锁的问题

十五:常用SQL技巧

十四:MySQL锁的问题

锁的概述

锁是计算机协调多个进程或线程并发访问某一资源的机制

锁的分类

从操作粒度分:表锁、行锁

从操作类型分:读锁、写锁

MySQL的锁

MySQL不同存储引擎所支持的锁机制是不同的

MyISAM表锁

如何加表锁

首先,MyISAM会自动给【select】语句加写锁,自动给【update、delete、insert】加写锁,在正常使用SQL时不需要手动添加表锁,但如果硬要手动写“填加表锁”,其语法为:加读锁:lock table table_name read;

加写锁:lock table table_name write;

解锁语句:unlock tables;(注意:不论是读锁还是写锁,在加完并执行完SQL语句之后,一定要解锁,否则就无法进行其他操作)

读锁案例

写锁案例

结论

查看锁的争用情况show open tables;

show status like "Table_locks%";

InnoDB行锁

事务的ACID属性:原子性(atomicity):一个事物就是一个操作单元,这个操作不可拆分,要么全部成功,要么全部失败

一致性(consistent):在事务开始前与完成后,数据保持一致(比如A给B转账,A减一元,B加一元,但两人的总金额不变)

隔离性(isolation):可以定义一个事务的操作结果何时对其他事务可见(有四个隔离级别,见下方)

持久性(durable):事务完成后,对于数据的修改是永久的

并发事务带来的问题丢失跟新:一个事务的更新被另一个事务的更新覆盖掉

脏读:读取到脏数据(例如,一个事务正在更新某个数据,但还未提交结果,这时候另一个事务读取了数据库中还未更新完成的数据并进行使用)

不可重复读:当同一个事务前后两次进行读取数据时,数据不一致

幻读:当同一个事务前后两次进行读取数据时,在第二次发现多了一个满足查询条件的数据

事务的隔离级别读未提交(read uncommitted)

读已提交(read committed)

可重复读(repeatable read),可重复读的意思是,该事务在未提交的状态下,再次执行一次时,查询结果与第一次结果是相同的,即使真正的数据库中的数据在第二次的时候已经被另一个事务改变了值,该事务第二次的查询结果也会与第一次一样,这就是“可重复读”,这一效果是使用“MVCC”实现的(具体MVCC是什么还未弄懂)。PS:MySQL中的事务默认的隔离级别就是“可重复读”。

串行化(serializable)

行锁的基本演示

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值