悲观锁和乐观锁实现 以及索引描述

原创 2018年04月15日 17:34:43

数据库设置级别
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
或者
select @@tx_isolation;

悲观锁:
在关系数据库管理系统里,悲观并发控制(又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”)是一种并发控制的方法。它可以阻止一个事务以影响其他用户的方式来修改数据。如果一个事务执行的操作都某行数据应用了锁,那只有当这个事务把锁释放,其他事务才能够执行与该锁冲突的操作。
悲观并发控制主要用于数据争用激烈的环境,以及发生并发冲突时使用锁保护数据的成本要低于回滚事务的成本的环境中。

begin;/begin work;/start transaction; (三者选一就可以)
//1.查询出商品信息
select status from t_goods where id=1 for update;
//2.根据商品信息生成订单
insert into t_orders (id,goods_id) values (null,1);
//3.修改商品status为2
update t_goods set status=2;
//4.提交事务
commit;/commit work;

乐观锁:
在关系数据库管理系统里,乐观并发控制(又名“乐观锁”,Optimistic Concurrency Control,缩写“OCC”)是一种并发控制的方法。它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,正在提交的事务会进行回滚。乐观事务控制最早是由孔祥重(H.T.Kung)教授提出。


select count from product where productId = 2;
update product set count = 45 where productId =2 and count = 46;

数据的锁级别,数据库的行级锁是依赖索引的

索引的创建
create index indexname on user(id);
或者
alert table tablename add index indexname(coluname);

面试的时候常会被问到,诸如,为什么行级锁依赖于索引。

可以这样回答,行级锁不利于对数据库的访问,增大了时间开销,索引是对某一列的数据排序,方便以后的访问,节省了时间的开销。所以行级锁依赖于索引有利于性能的提升(当然这个是要看数据量的),然后面试官可能会问到,索引是如何排序的?

那么这就要说到b+树了,说到b+树,又得说b-树了,说说二者的区别,以及其关键字存储位置和稳定性,巴拉巴拉……,暂时省略

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/windflybird/article/details/79951082

MySQL 乐观锁与悲观锁

MySQL 乐观锁与悲观锁
  • FX_SKY
  • FX_SKY
  • 2017-02-24 15:36:51
  • 937

最通俗易懂的乐观锁与悲观锁原理及实现

一、乐观锁 总是认为不会产生并发问题,每次去取数据的时候总认为不会有其他线程对数据进行修改,因此不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS操作实现。...
  • L_BestCoder
  • L_BestCoder
  • 2018-02-09 15:28:04
  • 1135

事务 四大特性 mysql 悲观锁与乐观锁

悲观锁     假设丢失更新一定会发生    利用数据库内部锁机制,管理事务   mysql数据库内部提供两种常用的锁机制  共享锁(读锁)和排它锁(写锁)  锁必须在事务中添加,事务结束了锁就释放了...
  • u010094934
  • u010094934
  • 2016-11-07 23:18:55
  • 2237

悲观锁和乐观锁的区别及应用场景

数据的锁定分为两种,第一种叫作悲观锁,第二种叫作乐观锁。 1、悲观锁,就是对数据的冲突采取一种悲观的态度,也就是说假设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住。【数据锁定:数据将暂时不...
  • php_younger
  • php_younger
  • 2016-09-23 09:28:13
  • 1116

深入理解乐观锁与悲观锁

在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观并发控制(乐观锁)和悲观并发控制(悲观...
  • zhangwj0101
  • zhangwj0101
  • 2016-03-21 14:06:46
  • 6998

乐观锁和悲观锁的区别(最全面的分析)

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据...
  • rexct392358928
  • rexct392358928
  • 2016-08-17 14:49:13
  • 15932

mysql隔离级别与悲观锁、乐观锁

1、什么是悲观锁,乐观锁 悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。而乐观锁机制在一定程度...
  • lingzhm
  • lingzhm
  • 2015-04-14 21:59:55
  • 5211

乐观锁 悲观锁实例

引言 为什么需要锁(并发控制)?   在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。 典型的冲突有: 丢失更新:一个事务的更新覆盖...
  • cws1214
  • cws1214
  • 2016-09-07 10:33:29
  • 1771

Java编程:悲观锁、乐观锁的区别及使用场景

定义:悲观锁(Pessimistic Lock): 每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁。由于...
  • claram
  • claram
  • 2016-12-31 23:51:10
  • 7924

数据库中乐观锁与悲观锁的概念

锁( locking )业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算处理中,我们希望针对某个 cut-off 时间点的数据进行处理,而不希望在结算进行过程中(可能是几秒种...
  • phphot
  • phphot
  • 2008-07-09 20:46:00
  • 15400
收藏助手
不良信息举报
您举报文章:悲观锁和乐观锁实现 以及索引描述
举报原因:
原因补充:

(最多只允许输入30个字)