mysql 锁表语句:

Lock锁整张表:

写锁定:

LOCK TABLES products WRITE;

写锁,锁定之后,只有当前线程可以进行读操作和写操作,其他线程读操作和写操作均被堵塞.....
读锁定:

LOCK TABLES products READ;

读锁,锁定之后,无论是当前线程还是其他线程均只能读操作,写操作全部被堵塞....

解锁:

UNLOCK TABLES;

行级锁/排他锁 [使用FOR UPDATE]

表需要是InnoDB引擎;

还需要配合事务,否则没有效果[没有事务的话,应该是锁了执行完该句马上又解锁,看不到效果吧];

BEGIN;//启动事务
SELECT * FROM products WHERE id=1 FOR UPDATE;//锁定某一行 where条件需要主键
COMMIT;//事务提交[或者 ROLLBACK 事务回滚]

在启动事务然后锁定某一行后,在事务提交之前或者事务回滚之前该行会一直处于锁定状态,此时只允许当前线程进行读写操作,其他线程只能进行读操作,其他写操作全部被堵塞....

MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!

补充:(2017-10-30)

Gap锁,区间锁。

1、当表数据id只有100-200,这100条数据

事务1:

select * from u_table where id=50 for update;

事务2:

insert into u_table(id)values(55);
#select * from u_table where id=55 for update;//无效,测试结论来看以下结论只对insert有效

此时事务2会等待事务1操作完才能执行。(事务2,id=45也等待, 245没有等待)

结论:当锁行数据不存在时,并且事务1,锁的id(50)小于当前表的区间值时。则id小于现有数据的最小id的事务都会锁定。区间锁定在( -∞,100)

2、数据id依然是100-200,这100条数据

直接给结论:当锁行数据不存在时,并且事务1,锁的id(250)大于当前表的区间值时。则id大于现有数据的最大id的事务都会锁定。区间锁定在( 200,+∞)

3、数据id依然是100-200,300-400,这200条数据

直接给结论:当锁行数据不存在时,并且事务1,锁的id(250)在当前表的某一段区间内时。则id在这段区间内的事务都会锁定。区间锁定在( 200,300)

PS.以前一直认为行锁,不会影响insert,现在看来,锁行的数据不存在时,还是要小心点,不然容易出现死锁

【MySQL】MySQL 常用语法之锁表与解锁表的更多相关文章

  1. python链接mysql以及常用语法

    MySQL是一个关系型数据库管理系统 ,其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库.在使用过程中不总是和它打交道,导致使用时候都得 ...

  2. SQL SERVER 查询被锁的表、解锁表

    -- 查询被锁的表select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName   f ...

  3. oracle查看被锁的表以及解锁表

    在oracle 上面查看别锁定的表,以及解锁表的sql: select t3.object_name,t3.owner,t2.machine,t2.sid,t2.serial# from v$lock ...

  4. java数据库 JDBC操作MySQL数据库常用API 部门表和员工表 创建表 添加数据 查询数据

    package com.swift.department; import java.sql.Connection; import java.sql.PreparedStatement; import ...

  5. 详述 MySQL 中的行级锁、表级锁和页级锁

    转自:https://blog.csdn.net/qq_35246620/article/details/69943011 refer:cnblogs.com/f-ck-need-u/p/899547 ...

  6. [数据库事务与锁]详解五: MySQL中的行级锁,表级锁,页级锁

    注明: 本文转载自http://www.hollischuang.com/archives/914 在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的 ...

  7. 【数据库】数据库的锁机制,MySQL中的行级锁,表级锁,页级锁

    转载:http://www.hollischuang.com/archives/914 数据库的读现象浅析中介绍过,在并发访问情况下,可能会出现脏读.不可重复读和幻读等读现象,为了应对这些问题,主流数 ...

  8. MySQL中的行级锁,表级锁,页级锁

    在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足. 在数据库的锁机制中介绍过,在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引 ...

  9. 【MySQL 读书笔记】全局锁 | 表锁 | 行锁

    全局锁 全局锁是针对数据库实例的直接加锁,MySQL 提供了一个加全局锁的方法, Flush tables with read lock 可以使用锁将整个表的增删改操作都锁上其中包括 ddl 语句,只 ...

随机推荐

  1. Scanner类nextInt方法的使用注意点

    一.先看一段正常的代码 1. 一段用Scanner捕获键盘输入的代码: Scanner sc = new Scanner(System.in); // 先读取键盘输入的字符串 System.out.p ...

  2. web项目,美工和前台配合,页面路径访问问题

    一.美工写页面使用相对路径,但后台使用项目的应用绝对路径,访问时会出现404或页面乱码的问题 目前的解决方法:在页面中添加base标签,指定当前页面默认的路径 base标签:为页面上的所有链接规定默认 ...

  3. django带后台管理功能的网站

    一.原起: 我大学是学的.Net平台.在那个平台上开发网站用的是ASP.NET这门技术:在那里对数据库的处理.为了 方便写代码,通常也是会用ORM(对象关系模型映射):毕业后搞起了MySQL数据库.自 ...

  4. mac下安装mysqlcient 报错

    一.我在mac下pip3安装mysqlclient 报错: pip3 install mysqlclient Collecting mysqlclient Using cached mysqlclie ...

  5. JMeter学习笔记(五)-总结

    本周主要学习了JMeter如下几方面内容: (1)Bdboy录制方式: (2)JMeter的代理录制方式: (3)关联,在关联时我们要找到哪些内容是要关联的,这个主要通过分析哪些内容是由服务器返回的, ...

  6. Linux下adb的配置

    进入当前用户主目录 yongdaimi@ubuntu:~$ cd ~ 打开.bashrc文件 yongdaimi@ubuntu:~$ vi .bashrc 在文件末尾添加下列代码 export ADB ...

  7. cocos2d-x 粒子动作 setTexture

    CCSize s = CCDirector::sharedDirector()->getWinSize(); CCNode* explosion = CCParticleSun::create( ...

  8. laravel 拾遗 中间件

    Problem You want to add middleware to your application but don't know where to begin.     Solution C ...

  9. solr中时区处理

    solr.in.sh中的最后 # By default the start script uses UTC; override the timezone if needed SOLR_TIMEZONE ...

  10. 【Java】Collection与Map接口总结

    Collection     -----List                -----LinkedList    非同步                 ----ArrayList      非同 ...