mysql锁初探

本文深入探讨SQL事务处理及不同类型的锁机制,包括共享锁、排他锁及其在事务中的作用,解释死锁现象及如何避免,同时解析MySQLInnoDB的行级锁特性和悲观锁、乐观锁的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:事务

     每次执行一条sql语句,都自动进行了开启事务,提交或者回滚的操作。

     要让多个sql语句共同组成个事务,就需要手动写 begin commit rollback了

2:

    select语句默认不加锁的可以在其后面加 for update (排他锁\写锁) 或者 lock in share mode(共享锁\读锁)    

    delete\update\insert 会自动加排他锁。

    在事务提交或者回滚时才会释放锁。

3:

    共享锁:共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。

    排他锁又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改。

某个事务操作时加上了排他锁,其它事务普通的select(不加锁)还是能读取到相应数据的,排他锁排斥的是其它事务也要来加锁的操作

4:

死锁:

    两个事务同时执行,加锁顺序相反,eg:第一个事务有两条sql语句,分别对id=1  和id=5进行加锁,另一个事务相反,则每个事务在执行第二条sql时就会产生死锁

    每个事务执行时mysql都会开启一个线程执行这个事务,当死锁时,该线程就卡主了。

    事务配合try catch使用,如果加锁失败的话会触发异常的话,那rollback也能释放该锁了吧。

5:

MySQL InnoDB默认行级锁。行级锁都是基于索引的,如果一条SQL语句用不到索引是不会使用行级锁的,会使用表级锁把整张表锁住,这点需要注意。

6

悲观锁和乐观锁是数据库并发控制的两种思想,方法。

悲观锁:利用数据库的锁机制(行锁,读锁,写锁,表锁),来实现并发控制,适用于数据竞争激烈的场景

乐观锁:每次数据库操作,利用数据的版本号(操作时先获取当前的版本号,操作完再对版本号加1,并且获取此时的版本号和这个加1的相等不相等),来实现并发控制,不利用数据的锁机制,适用于数据竞争不激烈的场景。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚空_2025

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值