mysql的锁机制呀_Mysql锁机制--写锁

===============

1 准备数据

1.1 建表

1.1.1 建立 Employee表

DROP TABLE IF EXISTS employee;

CREATE TABLE IF NOT EXISTS employee (

id INT PRIMARY KEY auto_increment,

name VARCHAR(40),

dept_id INT

)engine myisam;

1.1.2 建立 Department 表

DROP TABLE IF EXISTS department;

CREATE TABLE IF NOT EXISTS department (

id INT PRIMARY KEY auto_increment,

name VARCHAR(40)

)engine myisam;

1.1.3 注意:上述两张表的存储引擎都是 MyISam

1.2 插入数据

INSERT INTO employee(name, dept_id) VALUES('Alice', 1);

INSERT INTO employee(name, dept_id) VALUES('Bob', 1);

INSERT INTO department(name) VALUES('RD');

2 测试

2.1 给 Employee 表加上写锁

LOCK TABLE employee WRITE;

4451c7facb507a0d1d95af13fab8f6ee.png

2.2 查询 Employee 表

2.2.1 当前会话(终端、命令行窗口)

注意:当前会话是指执行了上面的 LOCK TABLE employee READ 语句的会话(窗口、命令行);在我的例子中,是白色背景。

SELECT * FROM employee;

mysql的锁机制呀_Mysql锁机制--写锁_第1张图片

2.2.2 其它会话(终端、命令行窗口)

注意:新开一个会话窗口;在我的例子中,是黑色背景。

e94e0252888f1bc2039cc278c5de1898.png

查询都会被阻塞(挂起)!

5929fb6a23c8bc93d1082a49cab564eb.png

在‘当前会话’中解除锁定

mysql的锁机制呀_Mysql锁机制--写锁_第2张图片

解除锁定后,‘其它会话’才能正常查询!

2.2.3 结论

可以看到,加了写锁后,当前会话可以查询,但其它会话已经不能查询了。

2.3 更新 Employee 表

2.3.0 准备

重新给 Employee 表加上写锁

LOCK TABLE employee WRITE;

2.3.1 当前会话

UPDATE employee SET name = 'Alice02' WHERE id = 1;

39ca20c769ed2916f82331d5e3fb01d1.png

2.3.2 其它会话

103fec6978cd6fd127dd9c26468505ca.png

还是被阻塞!

92649702878890a36624e5b168bb5a8a.png

当前会话解除锁定

2406f07bbdeefa2530e8c9a1132cf5aa.png

解除锁定后,才能更新

2.3.3 结论

可以看到,加了写锁后,当前会话可以更新(写操作),其它会话的更新操作会被阻塞。

2.4 查询其它表

2.4.0 准备

重新给 Employee 表加上写锁

LOCK TABLE employee WRITE;

2.4.1 当前会话

SELECT * FROM department;

5fbea9f08826b19cb3e136436f4d3031.png

2.4.2 其它会话

mysql的锁机制呀_Mysql锁机制--写锁_第3张图片

2.4.3 结论

加了写锁后,当前会话不能读取其它表,其它会话可以正常读取其它表。

3 结论

写锁,对于当前会话 (Owner) 来说,可以读取锁住的表、也可以更新,但不能读取其它表;

对于其它会话 (Other) 来说,不可以读取锁住的表、更不可能更新(会被阻塞),但可以正常读取其它表;

写锁是排它的

Mysql锁机制介绍

Mysql锁机制介绍 一.概况MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...

对mysql锁机制的学习

1.对于mysql学习,经常翻看一些博客,论坛,好像或多或少有mysq锁机制的学习与总结,所以今天有必要 对mysql锁机制的一些个人的总结,以便以后深入的学习. 2.学习这件事,从来都是“深入浅出” ...

mysql锁机制(转载)

锁是计算机协调多个进程或线程并发访问某一资源的机制 .在数据库中,除传统的 计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所 ...

再谈mysql锁机制及原理—锁的诠释

加锁是实现数据库并发控制的一个非常重要的技术.当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁.加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更 ...

mysql锁机制和事务隔离

mysql事务 1.InnoDB事务原理 事务(Transaction)是数据库区别于文件系统的重要特性之一,事务会把数据库从一种一致性状态转换为另一种一致性状态. 在数据库提交时,可以确保要么所有修 ...

Mysql锁机制--索引失效导致行锁变表锁

Mysql 系列文章主页 =============== Tips:在阅读本文前,最好先阅读 这篇(Mysql锁机制--行锁)文章~ 在上篇文章中,我们看到InnoDB默认的行锁可以使得操作不同行时不 ...

mysql锁机制详解

前言 大概几个月之前项目中用到事务,需要保证数据的强一致性,期间也用到了mysql的锁,但当时对mysql的锁机制只是管中窥豹,所以本文打算总结一下mysql的锁机制. 本文主要论述关于mysql锁机 ...

MySQL锁机制

一.概况MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking):BDB存储引擎采用 ...

20.Mysql锁机制

20.锁问题锁是计算机协调多个进程或线程并发访问某一资源的机制. 20.1 Mysql锁概述锁类型分为表级锁.页面锁.行级锁.表级锁:一个线程对表进行DML时会锁住整张表,其它线程只能读该表,如果要写 ...

随机推荐

扩展《C程序设计语言》练习2-3程序通用性

最近开始自学C语言,在看K&R的.练习2-3要求写一个函数,将输入的十六进制数字字符串转换成与之等价的整数值,配套答案没有扩展程序的通用性,所以我就稍微改造改造. ...

[置顶] 正则表达式应用:匹配IP地址

都知道iP地址有四个数值,三个点号组成.三个数值的具体范围为0到255,为了使用正则表达式匹配就必须分析IP地址的组成 1先分析数值,2再组合数值和点号 1先分析数值 IP地址的数字范围从0到255, ...

js得到分页栏

自己写的,感觉返回html代码蠢蠢的,但是新手并不知道怎么写更好的,感觉这样子也蛮简单.记录下来,以后来越改越好. //获得分页栏.注意indexSize为奇数,这样也比较好看 //totalNum: ...

一步一步从原理跟我学邮件收取及发送 4.不同平台下的socket

既然是面向程序员的文章那当然不能只说说原理,一定要有实际动手的操作.    其实作为我个人的经历来说,对于网络编程,这是最重要的一章! 作为一位混迹业内近20年的快退休的程序员,我学习过很多的开发语言 ...

[hdu5608]function

题意:$\sum_{d|n}f(d)=n^{2}-3n+2$,求$\sum_{i=1}^{n}f(i)\mod 10^{9}+7$ , $n \leqslant 10^{9}$ $\left( T \ ...

Linux中MySQL忽略表中字段大小写

linux 下,mysql 的表面默认是区分大小写的,windows 下默认不区分大小写,我们大多数在windows 下开发,之后迁移到linux(特别是带有Hibernate的工程),可以修改配置是 ...

数据库原理 - 序列3 - 事务是如何实现的? - Redo Log解析

6.5 事务实现原理之1:Redo Log 介绍事务怎么用后,下面探讨事务的实现原理.事务有ACID四个核心属性:A:原子性.事务要么不执行,要么完全执行.如果执行到一半,宕机重启,已执行的一半要回滚 ...

常用LINQ关键字用法汇总

背景 传统上,针对数据的查询都以简单的字符串表示,而没有编译时类型检查或 IntelliSense 支持.此外,还需要针对每种数据源学习一种不同的查询语言:SQL 数据库.XML 文档.各种 Web ...

Hibernate与数据库的触发器协同工作

Hibernate 与数据库中的触发器协同工作时, 会造成两类问题 1触发器使 Session 的缓存中的持久化对象与数据库中对应的数据不一致:触发器运行在数据库中, 它执行的操作对 Session ...

你可能感兴趣的:(mysql的锁机制呀)