演示行级排他锁

update 命令属于 DML语句,事务未提交/回滚时 会产生行级锁。目的是避免其它用户同时修改这个数据。

准备工作:

SQL> create table tt (id number);

Table created.

SQL> insert into tt values (1);

1 row created.

SQL> insert into tt values (2);

1 row created.

SQL> commit;

Commit complete.

窗口一:

SQL> update tt set id=100 where id=1;

1 row updated.

窗口二:

SQL> update tt set id=1000 where id=1;

光标停在此处不动

这就是行级锁。

在sys用户下查看v$session.

v$session 这个参数可以查看当前会话    通过blocking_session 可以看出 SID=43的会话被 SID=35的会话阻塞;

SQL> select sid,serial#,username,blocking_session from v$session where username=‘HR‘;

       SID    SERIAL# USERNAME                       BLOCKING_SESSION
---------- ---------- ------------------------------ ----------------
        35       1655 HR
        43       6817 HR                                           35

除了在窗口一下执行commit / rollback 外    还可以在库中执行下面命令 直接kill掉SID=35的会话

SQL> alter system kill session ‘35,1655‘ immediate;

System altered.

窗口一

SQL> select * from tt;
select * from tt
       *
ERROR at line 1:
ORA-03135: connection lost contact
Process ID: 19460
Session ID: 35 Serial number: 1655

窗口二

QL> update tt set id=1000 where id=1;

1 row updated.

SQL> select * from tt;

        ID
----------
       1000
         2

由于窗口一的会话已经断开,行级锁也就不存在。窗口二update语句得以执行。

时间: 2024-12-24 18:32:07

演示行级排他锁的相关文章

[MySQL] 行级锁SELECT ... LOCK IN SHARE MODE 和 SELECT ... FOR UPDATE

一.译文 翻译来自官方文档:Locking Reads If you query data and then insert or update related data within the same transaction, the regular SELECT statement does not give enough protection. Other transactions can update or delete the same rows you just queried. In

[数据库事务与锁]详解六: MySQL中的共享锁与排他锁

注明: 本文转载自http://www.hollischuang.com/archives/923 在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行级锁分为共享锁和排他锁两种,本文将详细介绍共享锁及排他锁的概念.使用方式及注意事项等. 共享锁(Share Lock) 共享锁又称读锁,是读取操作创建的锁.其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁. 如果事务T对数

转 MySQL中的共享锁与排他锁

原文链接在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行级锁分为共享锁和排他锁两种,本文将详细介绍共享锁及排他锁的概念.使用方式及注意事项等. 共享锁(Share Lock) 共享锁又称读锁,是读取操作创建的锁.其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁. 如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁.获准共享锁的事务只能读数据,不

Mysql的共享锁和排他锁(转载)

mysql锁机制分为表级锁和行级锁,本文就和大家分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流. 共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改. 排他锁又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改. 对于共享锁大家可能很好理解,就是多个事务只能读数据不能改数据

【转】MySQL中的共享锁与排他锁

在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行级锁分为共享锁和排他锁两种,本文将详细介绍共享锁及排他锁的概念.使用方式及注意事项等. 共享锁(Share Lock) 共享锁又称读锁,是读取操作创建的锁.其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁. 如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁.获准共享锁的事务只能读数据,不能修改数

mysql共享锁与排他锁

mysql锁机制分为表级锁和行级锁,本文就和大家分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流. 共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改. 排他锁又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改. 对于共享锁大家可能很好理解,就是多个事务只能读数据不能改数据

mysql悲观锁中的共享锁和排他锁

概述: 共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改. 排他锁又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改. 对于共享锁大家可能很好理解,就是多个事务只能读数据不能改数据,对于排他锁大家的理解可能就有些差别,我当初就犯了一个错误,以为排他锁锁住一行数据后,其他事务就不能读取

获取数据库时间sql 以及行级锁总结-共享锁-排他锁-死锁

--TRUNC(date,[fmt]) /TRUNC(number[,decimals])SELECT SYSDATE FROM dual;SELECT TRUNC(SYSDATE) FROM dualSELECT TRUNC(12.34524,2) FROM dual;  --12.34SELECT TRUNC(-12.34724,2) FROM dual; --12.34SELECT TRUNC(12.34524,-1) FROM dual; --10--返回当前月的第一天 SELECT T

Oracle锁表 行级锁 表级锁 行级锁

Oracle锁表  行级锁  表级锁 ---- 行被排他锁定 ----在某行的锁被释放之前,其他用户不能修改此行          ----使用 commit 或 rollback 命令释放锁 ----Oracle 通过使用 INSERT.UPDATE 和 SELECT-FOR UPDATE 语句自动获取行级锁 SELECT-FOR UPDATE 子句  ―在表的一行或多行上放置排他锁  ―用于防止其他用户更新该行 ―可以执行除更新之外的其他操作 ―select * from goods whe