iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >SQL中的LOCK、UNLOCK怎么使用
  • 517
分享到

SQL中的LOCK、UNLOCK怎么使用

2023-06-30 05:06:42 517人浏览 八月长安
摘要

本篇内容主要讲解“sql中的LOCK、UNLOCK怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL中的LOCK、UNLOCK怎么使用”吧!MySQL 表锁定锁是与表关联的标志。Mys

本篇内容主要讲解“sql中的LOCK、UNLOCK怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL中的LOCK、UNLOCK怎么使用”吧!

    MySQL

    锁是与表关联的标志。Mysql允许客户端会话显式获取表锁,以防止其他会话在特定时间段内访问同一个表。客户端会话只能为自己获取或释放表锁。它无法获取或释放其他会话的表锁。

    CREATE TABLE tbl (  id INT NOT NULL AUTO_INCREMENT,  col INT NOT NULL,  PRIMARY KEY (id)) Engine = InnoDB;

    LOCK和UNLOCK TABLES语法

    以下语句显式获取表锁:

    LOCK TABLES table_name [READ | WRITE]

    要锁定表,请在LOCK TABLES关键字后指定其名称。此外,您可以指定锁的类型,可以是 READ或 WRITE。

    要释放表的锁,请使用以下语句:

    UNLOCK TABLES;

    读锁

    READ锁具有以下特点:

    • READ可以通过多个会话同时获取表的锁。此外,其他会话可以从表中读取数据而无需获取锁。

    • 持有READ锁的会话只能读取表中的数据,但无法写入。此外,在READ释放锁之前,其他会话无法将数据写入表。来自另一个会话的写入操作将进入等待状态,直到READ锁定被释放。

    • 如果会话正常或异常终止,mysql将隐式释放所有锁。此功能也与WRITE锁相关。

    示例:

    在第一个会话中,首先,连接到mysqldemo数据库并使用CONNECTioN_ID()函数获取当前连接ID,如下所示:

    SELECT CONNECTION_ID();

    SQL中的LOCK、UNLOCK怎么使用

    然后,在tbl表中插入一个新行。

    INSERT INTO tbl(col) VALUES(10);

    接下来,查询tbl表中的数据。

    SELECT * FROM tbl;

    SQL中的LOCK、UNLOCK怎么使用

    之后,要获取锁定,请使用LOCK TABLE语句。

    LOCK TABLE tbl READ;

    最后,在同一个会话中,如果您尝试在tbl表中插入新行,则会收到错误消息。

    INSERT INTO tbl(col) VALUES(11);

    SQL中的LOCK、UNLOCK怎么使用

    因此,一旦READ获取了锁,就无法在同一会话中将数据写入表中。

    从另一个会话中检查锁定。
    首先,连接到mysqldemo并检查连接ID:

    SELECT CONNECTION_ID();

    SQL中的LOCK、UNLOCK怎么使用

    然后,从tbl 表中检索数据:

    SELECT * FROM tbl;

    SQL中的LOCK、UNLOCK怎么使用

    接下来,在tbl表中插入一个新行:

    INSERT INTO tbl(col) VALUES(20);

    SQL中的LOCK、UNLOCK怎么使用

    来自第二个会话的插入操作处于等待状态,因为第一个会话READ已经在tbl表上获取了锁,但尚未释放。

    可以从SHOW PROCESSLIST查看详细信息。

    SHOW PROCESSLIST;

    SQL中的LOCK、UNLOCK怎么使用

    之后,返回第一个会话并使用UNLOCK TABLES语句释放锁定。READ从第一个会话释放锁定后,INSERT执行第二个会话中的操作。

    unlock tables;

    最后,检查tbl表的数据,看看INSERT第二个会话的操作是否真的执行了。

    SELECT * FROM tbl;

    SQL中的LOCK、UNLOCK怎么使用

    写锁

    WRITE 锁具有以下特点:

    • 保存表锁的唯一会话可以从表中读取和写入数据。

    • 在WRITE锁定释放之前,其他会话无法从表中读取数据并将数据写入表中。

    首先,WRITE从第一个会话中获取锁定。

    LOCK TABLE tbl WRITE;

    然后,在tbl表中插入一个新行

    INSERT INTO tbl(col) VALUES(11);

    有用。

    接下来,从tbl表中读取数据。

    SELECT * FROM tbl;

    SQL中的LOCK、UNLOCK怎么使用

    它也有效。

    之后,从第二个会话开始,尝试写入和读取数据:

    INSERT INTO tbl(col) VALUES(21); SELECT * FROM tbl;

    SQL中的LOCK、UNLOCK怎么使用

    SQL中的LOCK、UNLOCK怎么使用

    最后,从第一个会话中释放锁定。

    UNLOCK TABLES;

    看到第二个会话中的所有待处理操作都已执行,下图说明了结果:

    SQL中的LOCK、UNLOCK怎么使用

    读锁与写锁 读锁是“共享”锁,它可以防止正在获取写锁,但不能锁定其他读锁。写锁是“独占”锁,可以防止任何其他类型的锁。

    到此,相信大家对“SQL中的LOCK、UNLOCK怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: SQL中的LOCK、UNLOCK怎么使用

    本文链接: https://www.lsjlt.com/news/327452.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • SQL中的LOCK、UNLOCK怎么使用
      本篇内容主要讲解“SQL中的LOCK、UNLOCK怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL中的LOCK、UNLOCK怎么使用”吧!MySQL 表锁定锁是与表关联的标志。MyS...
      99+
      2023-06-30
    • SQL中表锁定(LOCK、UNLOCK)的具体使用
      目录MySQL 表锁定LOCK和UNLOCK TABLES语法读锁示例:写锁MySQL 表锁定 锁是与表关联的标志。MySQL允许客户端会话显式获取表锁,以防止其他会话在特定时间段内...
      99+
      2024-04-02
    • MySQL中Lock Tables和Unlock Tables的作用是什么
      这期内容当中小编将会给大家带来有关MySQL中Lock Tables和Unlock Tables的作用是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。锁定表的语法:L...
      99+
      2024-04-02
    • java中lock怎么使用
      在Java中,Lock接口是用于实现锁的机制。以下是Lock接口的使用方法:1. 创建Lock对象:可以使用ReentrantLoc...
      99+
      2023-10-20
      java
    • java中lock怎么用
      小编给大家分享一下java中lock怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编...
      99+
      2023-06-14
    • 怎么在java中使用lock获取锁
      这篇文章给大家介绍怎么在java中使用lock获取锁,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮点类型,用来表示小数的...
      99+
      2023-06-14
    • 怎么使用Oracle中的SQL Loader
      这篇文章主要介绍“怎么使用Oracle中的SQL Loader”,在日常操作中,相信很多人在怎么使用Oracle中的SQL Loader问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
      99+
      2024-04-02
    • sql中的select distinct怎么使用
      在SQL中,SELECT DISTINCT用于返回唯一不重复的值。通过在SELECT语句中添加DISTINCT关键字,可以筛...
      99+
      2024-04-16
      sql
    • C#多线程中lock怎么用
      这篇文章主要介绍了C#多线程中lock怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。下面就是一段简单的代码。public class AccessC...
      99+
      2023-06-17
    • sql中的union怎么使用
      在SQL中,UNION是一种用于合并两个或多个SELECT语句结果集的操作符。使用UNION时,要求两个SE...
      99+
      2023-09-12
      sql
    • sql中identity_insert怎么使用
      在SQL中,IDENTITY_INSERT用于允许将值插入一个带有标识列的表。标识列是指自动增长的列,通常用于为表中的每一行生成唯一...
      99+
      2023-08-30
      sql
    • SQL中declare怎么使用
      在SQL中,DECLARE关键字用于声明一个变量。可以使用DECLARE来声明标量变量、表变量和游标变量。1. 声明标量变量:```...
      99+
      2023-08-08
      SQL declare
    • SQL Server中的DATEADD怎么使用
      这篇文章主要讲解了“SQL Server中的DATEADD怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL Server中的DATEADD怎么使用”吧!句法与类似的功能一样,&n...
      99+
      2023-06-05
    • sql中exists怎么使用
      在SQL中,EXISTS是一个用于检查子查询结果是否存在的操作符。它返回一个布尔值,表示是否存在。以下是EXISTS的使用方法:1....
      99+
      2023-08-08
      sql exists
    • SQL中VARCHART怎么使用
      在SQL中,VARCHAR用于定义可变长度的字符数据类型。以下是在SQL中使用VARCHAR的示例:1. 创建一个具有VARCHAR...
      99+
      2023-08-30
      SQL
    • sql中casewhen怎么使用
      在SQL中,CASE WHEN语句用于根据条件执行不同的操作。它的语法格式如下:```sqlCASEWHEN condition1 ...
      99+
      2023-08-09
      sql
    • Java多线程中Lock的使用小结
      Jdk1.5 以后,在 java.util.concurrent.locks 包下,有一组实现线程同步的接口和类,说到线程的同步,可能大家都会想到 synchronized 关键字,...
      99+
      2023-05-18
      Java多线程Lock Java Lock
    • C#如何使用多线程中的lock
      小编给大家分享一下C#如何使用多线程中的lock,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!经常碰到同时需要对某个数据进行操作,或者对某个文件进行读写操作,对于...
      99+
      2023-06-17
    • sql中的nvl函数怎么使用
      在 SQL 中,NVL 函数用于将一个空值(NULL)替换为另一个指定的值。它的语法如下:```NVL(expr1, expr2)`...
      99+
      2023-09-17
      sql
    • sql语句中的like怎么使用
      在SQL语句中,LIKE是用于模糊匹配字符串的操作符。它通常与通配符一起使用,可以在WHERE子句中筛选满足特定条件的数据。...
      99+
      2023-09-29
      sql
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作