当前课程知识点:数据库技术应用 > 教学情境五、银行存取款机数据库安全性 > 模块3、MYSQL数据库的锁机制 > MYSQL数据库的锁机制
同学们好
今天我给大家讲解的是
MySQL中一个非常重要机制
它是解决事务并发操作的重要手段
它就是锁机制
我们将以BankDB数据库为事例数据库
给大家介绍锁的知识点
请大家打起精神
课程即将开始
首先看一下应用场景
数据库的锁是一种软件机制
用来控制防止某个用户
在已经占有某种资源时
其他用户做出影响本用户数据操作或
导致数据非完整性和非一致性问题发生的手段
任务分析
当用户对数据库并发访问时
为了确保事务完整性和数据库一致性
需要使用锁定
以防止用户读取正在由其他用户更改的数据
并防止多个用户同时更改相同数据
如果不使用锁定
则数据库中的数据可能在逻辑上不正确
并且对数据的查询可能会产生意想不到的结果
具体地说
锁定可以防止丢失更新、脏读、不可重复读和幻读
本课目标
了解锁的概述
了解MySQL中的锁和数据库引擎
InnoDB和MyISAM支持表级锁
InnoDB事务实现的行级锁
知识技能
相对于其他数据库而言
MySQL锁的机制比较简单
最显著的特点是不同的存储引擎
支持不同的锁机制
MyISAM和MEMORY存储引擎采用表级锁
DBD存储引擎采用的是页面锁和表级锁
InnoDB支持行级锁、表级锁、
默认情况采用行级锁
三种粒度锁的特性
表级锁开销小,加锁快、不会出现死锁
锁定力度大,发生冲突的概率高 并发度低
行级锁开销大 加锁慢会出现死锁
锁定力度小发生锁冲突的概率最低并发度高
页面锁开销和加锁时间介于表锁和行锁之间
会出现死锁
锁定力度介于表和行级锁之间
并发度一般
MySQL表级锁的锁模试
1、表共享锁2、表独占锁
任务实施
表级锁
给BankDB数据库中的userinfo表
和cardinfo表添加读锁
具体的添加方式
大家可以看一下以下两条语句
如果加的read锁
只能读取不能够更改数据
并且只能访问加锁的表
解锁表的语句用Unlock后面加 tables就可以
添加表级写锁
给userinfo表添加写锁
具体的语法
Lock tables userinfo write 来添加
MySQL的InnoDB引擎行的锁
共享锁
InnoDB引擎
共享锁用于所有的只读数据操作
独占锁为修改数据而保留
它所锁定的资源
其他事务不能读取也不能修改
意向共享锁
意向独占锁
意向锁是InnoDB内部使用的
这两种意向锁都是表锁
比如事务打算给行加共享锁
现在表上添加IS锁
锁与SQL语句
对于update、delete和insert语句
InnoDB会自动涉及数据集加排他锁
对于select语句与InnoDB
不加任何锁可以显示加锁
Select * from userinfo
where CoustomerID=‘1001’for update
Select * from userinfo
where CoustomerID=‘1001’lock in share mode
Lock in share mode 是共享锁
如果加密记录后进行更改使用for update
任务扩展
在员工系统中,把表加上表级锁
好谢谢大家的聆听
-模块1、数据库的基础知识
--数据库的基础知识
-模块2、MYSQL介绍与安装
--MYSQL介绍与安装
-模块3、银行存取款机数据库的创建与维护
--银行存取款机数据库的创建与维护
-模块4、银行存取款机数据库的设计
--银行存取款机数据库的设计
-模块1、表的创建
--2.1表的创建
--表的创建
-模块2、表的管理
--2.2表的管理
--表的管理
-模块3、索引
--2.3索引
--索引
-实践小课堂:宠物电商管理平台数据库和表的创建
-模块1、银行存取款机数据插入、修改和删除
--银行存取款机数据插入、修改和删除
-模块2、银行存取款机简单查询
--银行存取款机简单查询和统计查询
-模块3、银行存取款机连接查询
--3.3连接查询
--银行存取款机连接查询
-模块4、银行存取款机子查询
--3.4子查询
--银行存取款机子查询
-模块5、银行存取款机分类汇总与排序
--银行存取款机分类汇总与排序
-模块6、银行存取款机视图
--银行存取款机视图
-模块1、银行存取款机存储过程
--4.1.2事务
--银行存取款机存储过程
-模块2、银行存取款机触发器
--银行存取款机触发器
-模块1、MYSQL用户管理
--MYSQL用户管理
-模块2、MYSQL权限管理
--MYSQL权限管理
-模块3、MYSQL数据库的锁机制
--MYSQL数据库的锁机制
-模块4、MYSQL备份和恢复
--MYSQL备份和恢复