栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SQL 并发与锁

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQL 并发与锁

并发 MySQL默认的行级锁

当我们在MySQL数据库开启一个事务,并对一行数据进行修改,该行在事务期间被锁定,也就是说除了该事务其余事务无法对该行进行操作。从而保证了数据的安全性。也就是MySQL默认的行级锁。

并发的常见问题和解决方式 事务的隔离级别
  1. 读未提交
  2. 读已提交
  3. 可重复读
  4. 可串行化
脏读

读取到了事务尚未提交的修改后数据。

例如事务A 对于数据进行了更改,比如增加了用户的余额,但是这一行为还没有提交,此时用户看到了自己的余额。然后如果事务A此时撤销了事务,那么用户看到的余额也就是一个垃圾数据,叫做脏读。

不可重复读

我们在同一个事务中多次查询,读到不一样的数据。

比如顾客先读取了自己的余额有10块钱,然后去买东西,交钱之前,他的老婆把十块钱取走了,他交钱的时候发现自己没有钱。

幻读

我们的查询结果的事务先于更新结束,导致我们没有查到一些复合条件的数据。

查看当前隔离级别
SHOW VARIABLES LIKE 'transaction_isolation%'
修改当前隔离级别
--可串行化
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
--可重复读
SET TRANSACTION ISOLATION LEVEL REPEATABLE-READ;
--读已提交
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
--读未提交
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
全局修改隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
为当前会话和连接设置隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
死锁

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

  1. 循环等待
  2. 不可剥夺
  3. 互斥性:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。
  4. 请求和保持
START TRANSACTION;
UPDATE ORDER SET STATUS=1 WHERe order_id=1;
UPDATE customers SET state='VA' WHERe customer_id=1;
COMMIT;
--
START TRANSACTION;
UPDATE customers SET state='VA' WHERe customer_id=1;
UPDATE ORDER SET STATUS=1 WHERe order_id=1;
COMMIT;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/343445.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号