【MySQL】MySQL 常用语法之锁表与解锁表
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 常用语法之锁表与解锁表的更多相关文章
- python链接mysql以及常用语法
MySQL是一个关系型数据库管理系统 ,其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库.在使用过程中不总是和它打交道,导致使用时候都得 ...
- SQL SERVER 查询被锁的表、解锁表
-- 查询被锁的表select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName f ...
- oracle查看被锁的表以及解锁表
在oracle 上面查看别锁定的表,以及解锁表的sql: select t3.object_name,t3.owner,t2.machine,t2.sid,t2.serial# from v$lock ...
- java数据库 JDBC操作MySQL数据库常用API 部门表和员工表 创建表 添加数据 查询数据
package com.swift.department; import java.sql.Connection; import java.sql.PreparedStatement; import ...
- 详述 MySQL 中的行级锁、表级锁和页级锁
转自:https://blog.csdn.net/qq_35246620/article/details/69943011 refer:cnblogs.com/f-ck-need-u/p/899547 ...
- [数据库事务与锁]详解五: MySQL中的行级锁,表级锁,页级锁
注明: 本文转载自http://www.hollischuang.com/archives/914 在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的 ...
- 【数据库】数据库的锁机制,MySQL中的行级锁,表级锁,页级锁
转载:http://www.hollischuang.com/archives/914 数据库的读现象浅析中介绍过,在并发访问情况下,可能会出现脏读.不可重复读和幻读等读现象,为了应对这些问题,主流数 ...
- MySQL中的行级锁,表级锁,页级锁
在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足. 在数据库的锁机制中介绍过,在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引 ...
- 【MySQL 读书笔记】全局锁 | 表锁 | 行锁
全局锁 全局锁是针对数据库实例的直接加锁,MySQL 提供了一个加全局锁的方法, Flush tables with read lock 可以使用锁将整个表的增删改操作都锁上其中包括 ddl 语句,只 ...
随机推荐
- 多进程对 MySQL update的影响
今天要做数据清洗的时候,要更新一个数据库字段,考虑到用多进程去更新数据库,也许程序会跑得快一些,结果开了64个进程, 结果是其他程序更新的时候,速度非常慢,最后发现的原因是,数据库中有64个SQL语句 ...
- DOA——MUSIC算法
一.均匀圆阵(UCA, Uniform Circular Array)的MUSIC算法 假设一个半径为R的M元均匀圆阵的所有阵元均位于坐标系X-Y平面内,第k-1个阵元坐标为,第i个窄带信号波长为,来 ...
- js获取日期实例之昨天今天和明天、后天
本文介绍了js获取日期的方法,可以获取前天.昨天.今天.明天.后天. 代码: <html> <head> <meta http-equiv="Content-T ...
- 【Android】19.2 ShareActionProvider类—帮你把信息分享出去
分类:C#.Android.VS2015: 创建日期:2016-03-06 一.简介 共享操作提供程序类(ShareActionProvider)简化了你希望与其他人(或者其他应用程序)共享或分享出来 ...
- C++ new操作符详解
一.new操作符的概念 我们通常讲的new是指的是new operator,其实还有另外两个概念,operator new 和 placement new. 1.new operator 我们在使用n ...
- jquery实现仿京东侧边栏
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 解决 windows10和ubuntu16.04双系统下时间不对的问题
- dp之分组背包hdu3535(推荐)
题意:有0,1,2三种任务,0任务中的任务至少得完成一件,1中的任务最多完成1件,2中的任务随便做.每一个任务最多只能做一次 .n代表有n组任务,t代表有t分钟,m代表这组任务有m个子任务,s代表这m ...
- wpf/Silverlight/wp中如何绑定模板中的属性
<Style TargetType="{x:Type TabItem}" x:Key="EditorTabItemStyle"> <Sette ...
- Session过期后自动跳转到登录页面
最近研究如果用原生的Filter来判别session存在否或者过期否.来跳转到的页面实例,下载来展示代码. 因为顾虑器是每次请求能会进入的,所以可以设置了,进行拦截判断 1.配置web.xml < ...