数据库锁问题(mysql)

实验名称: Mysql锁问题
一、实验目的
了解mysql锁机制,并通过简单案例进行演示。

二、实验内容和步骤
1.mysql 锁概述
MySQL有三种锁的级别:页级、表级、行级。
MyISAM和MEMORY存储引擎采用的是表级锁(table- level locking);
BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;
InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。
MySQL这3种锁的特性可大致归纳如下:
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

2.以InnoDB为例子演示锁等待
①事务如下
Session A
set autocommit=0;
begin;
select * from user where user_id<4 for UPDATE;
session B
set autocommit=0;
begin;
select * from user where user_id=2 for UPDATE;
delete from user where user_id=3;
②运行结果
在这里插入图片描述
在这里插入图片描述
③行锁争用情况
在这里插入图片描述
3.以InnoDB为例子演示死锁
①事务如下
Session A
set autocommit=0;
begin;
select * from user where user_id=1 for UPDATE;
select * from user where user_id=2 for UPDATE;
Session B
set autocommit=0;
begin;
select * from user where user_id=2 for UPDATE;
select * from user where user_id=1 for UPDATE;
②运行结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
③查看死锁
在这里插入图片描述
④解除锁(杀死进程)
在这里插入图片描述
在这里插入图片描述

发布了33 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/lz970704/article/details/104987515
今日推荐