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. 多进程对 MySQL update的影响

    今天要做数据清洗的时候,要更新一个数据库字段,考虑到用多进程去更新数据库,也许程序会跑得快一些,结果开了64个进程, 结果是其他程序更新的时候,速度非常慢,最后发现的原因是,数据库中有64个SQL语句 ...

  2. DOA——MUSIC算法

    一.均匀圆阵(UCA, Uniform Circular Array)的MUSIC算法 假设一个半径为R的M元均匀圆阵的所有阵元均位于坐标系X-Y平面内,第k-1个阵元坐标为,第i个窄带信号波长为,来 ...

  3. js获取日期实例之昨天今天和明天、后天

    本文介绍了js获取日期的方法,可以获取前天.昨天.今天.明天.后天. 代码: <html> <head> <meta http-equiv="Content-T ...

  4. 【Android】19.2 ShareActionProvider类—帮你把信息分享出去

    分类:C#.Android.VS2015: 创建日期:2016-03-06 一.简介 共享操作提供程序类(ShareActionProvider)简化了你希望与其他人(或者其他应用程序)共享或分享出来 ...

  5. C++ new操作符详解

    一.new操作符的概念 我们通常讲的new是指的是new operator,其实还有另外两个概念,operator new 和 placement new. 1.new operator 我们在使用n ...

  6. jquery实现仿京东侧边栏

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. 解决 windows10和ubuntu16.04双系统下时间不对的问题

  8. dp之分组背包hdu3535(推荐)

    题意:有0,1,2三种任务,0任务中的任务至少得完成一件,1中的任务最多完成1件,2中的任务随便做.每一个任务最多只能做一次 .n代表有n组任务,t代表有t分钟,m代表这组任务有m个子任务,s代表这m ...

  9. wpf/Silverlight/wp中如何绑定模板中的属性

    <Style TargetType="{x:Type TabItem}" x:Key="EditorTabItemStyle"> <Sette ...

  10. Session过期后自动跳转到登录页面

    最近研究如果用原生的Filter来判别session存在否或者过期否.来跳转到的页面实例,下载来展示代码. 因为顾虑器是每次请求能会进入的,所以可以设置了,进行拦截判断 1.配置web.xml < ...