数据库存储过程和锁机制

存储过程

存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的,存储过程思想上很简单,就是数据库SQL语言层面的代码封装与有重用

特点

封装,复用,可以接收参数,也可以返回数据,减少网络交互,效率提升

基本语法

创建存储过程:
create procedure p1()
begin
select count(*)from student;
end;调用:
call p1();查看存储过程:
select * from information_schema.ROUTINES where ROUTINE_SCHEMA = 'itcast';删除:
drop procedure if exists p1;

锁机制

分类

  1. 全局锁:锁定数据库中的所有表。

  2. 表级锁:每次操作锁住整张表。

  3. 行级锁:每次操作锁住对应的行数据。

全局锁

全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。

案例

其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性。其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性,但是可以执行dql语句。

指令

flush tables with read lock.   //加全局锁
mysqldump -uroot -p1234 itcast >itcast.sql   //数据库备份
unlock tables.  //释放全局锁

表级锁

每次操作锁住整张表,锁定粒度大,发生锁冲突的概率最高,并发度最低

表锁

a.表共享读锁(read lock)

创建表的读锁以后,所有客户端一样只能进行查询操作,其他修改DML和DDL语句都无法执行

b.表独占写锁(write lock)

客户端一创建写锁以后,对表数据既可以读也可以执行其他的操作,但是是独占的形式,其他客户端都会进入阻塞的状态

元数据锁(meta data lock,MDL)

MDL加锁过程是系统自动控制,无需显式使用,在访问一张表的时候会自动加上,MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务的时候,不可以对元数据进行写入操作。在MySQL5.5中引入了MDL,当对一张表进行增删改查的时候,加MDL读锁(共享);当对表结构进行变更操作的时候,加MDL写锁(排他)。

意向锁

为了避免DML在执行时,加的行锁与表锁的冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查,如下实例

注意:为什么引入意向锁,因为在表数据量非常大的情况下,如果我们增加表锁,逐行检查带来消耗太大,使用意向锁我们在增加表锁的时候直接可以判断两个锁是否兼容实现锁的加入。

a.意向共享锁(IS)

由语句 select...lock in share mode添加,与表锁共享锁(read)兼容,与表锁排它锁(write)互斥

b. 意向排他锁(IX)

出insert、update、delete、select...for update 添加,与表锁共享锁(read)及排它锁(write)都互斥。意向锁之间不会互斥。

行级锁

行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高,应用在InnoDB存储引擎中;InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁,

1.行锁(Record Lock)

锁定单个行记录的锁,防止其他事务对此行进行update和delete。在RC、RR隔离级别下都支持。

a.共享锁

允许一个事务去读一行,阻止其他事务获得相同数据集的排它锁。

b.排他锁

允许获取排他锁的事务更新数据,阻止其他事务获得相同数据集的共享锁和排他锁。

c.两者的兼容关系

d.sql的默认锁

思考: 在索引当时我们说过在一条数据执行updata的情况下,如果我们查询条件后是没有加索引的,我们会默认升级行锁变成表锁!也正是这个原因-----InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁,

2.间隙锁(Gap Lock):

锁定索引记录间隙(不含该记录)确保索引记录间隙不变,防止其他事务在这个间隙进行insert,产生幻读。在RR隔离级别下都支持。

3.临键锁(Next-Key Lock):

行锁和间隙锁组合,同时锁住数据,并锁住数据前面的间隙Gap。在RR隔离级别下支持。

默认情况下,InnoDB在读事务隔离级别运行,InnoDB使用次密钥锁进行搜索和索引扫描,以防止幻读。

1.索引上的等值查询(唯一索引),给不存在的记录加锁时,优化为间隙锁。

2.索引上的等值查询(普通索引),向右遍历时最后一个值不满足查询需求时,次键锁退化为间隙锁。

3.索引上的范围查询(唯一索引)--会访问到不满足条件的第一个值为止。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/849605.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

找工作,你知道找你的是外包吗?这篇文章讲透各种外包、内包公司!

文章目录 一、传统外包公司二、软件厂商。三、内包如何选择?参考链接互联网上存在大量键盘侠,但多数缺乏对行业的深入了解,凭个人热情和经历妄下定论。为避免误导,现详细探讨市场上涉及“外包”的不同公司类型,希望能为大家提供帮助。 一、传统外包公司 首先是传统的外包…

Flutter开发效率提升1000%,Flutter Quick教程之对Widget进行删除,剪切,粘贴

一,删除操作 1,首先我们选中要删除的Widget。 2,在左边的侧边栏,点击删除按钮,即可完成对组件的删除操作。 二,剪切。剪切是相同的道理,都是先选中,再点击对应的按钮。 1&#xff…

C#朗读语音

最近有个需求,需要在C#程序发生异常时候,朗读文字,C#提供了.net framework可以提供简单的语音朗读功能。 引入依赖 using System.Media; using System.Speech.Synthesis; using System.Runtime.InteropServices; //报警音量 SystemSounds.…

【程序语言定义】

文章目录 一、程序语言的定义与分类1.程序语言的定义2.程序语言的分类低级语言高级语言 二、程序语言的组成1.语法(Syntax)2.语义(Semantics)3.实现(Implementation) 三、程序语言的发展历程早期的机器语言…

javaWeb4 Maven

Maven-管理和构建java项目的工具 基于POM的概念 1.依赖管理:管理项目依赖的jar包 ,避免版本冲突 2.统一项目结构:比如统一eclipse IDEA等开发工具 3.项目构建:标准跨平台的自动化项目构建方式。有标准构建流程,能快速…

java 原生http服务器 测试JS前端ajax访问实现跨域传post数据

后端 java eclipse 字节流转字符 package Httpv3;import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer;import java.io.IOException; import java.i…

【全开源】JAVA打车小程序APP打车顺风车滴滴车跑腿源码微信小程序打车源码

:构建便捷出行新体验 一、引言:探索打车系统小程序源码的重要性 在数字化快速发展的今天,打车系统小程序已成为我们日常生活中不可或缺的一部分。它以其便捷、高效的特点,极大地改变了我们的出行方式。而背后的关键,…

for of 和 for in 的区别

for in适合遍历对象, for of适合遍历数组。 for in遍历的是数组的索引,对象的属性,以及原型链上的属性。 1.循环数组 区别一:for in 和 for of 都可以循环数组。for in 输出的是数组的index下标,而for of 输出的是数…

KOL+UGC:解锁品牌内容营销新策略,增强用户参与与互动

在当今数字化时代,品牌与受众之间的互动性和参与感变得至关重要。其中,KOL和UGC(用户生成内容)的结合,为品牌创造了一种全新的内容创作模式。这种模式不仅增强了内容的吸引力,还极大地提升了品牌与受众之间…

win键盘键位映射:欧版键盘->国内布局|是否应该买国外版笔记本?

最近买了个欧版笔记本电脑,键盘是欧版键盘: 键盘上的按钮实体和国内不完全一样键盘按钮上印的字母符号和国内不完全一样 具体差异 如图: shift处欧版是两个按键。可通过键盘键位映射解决。回车Enter、| 、布局不同。非常别扭,…

跨境反向海淘系统:业务流程解析与未来发展展望

随着全球化的深入发展和互联网技术的飞速进步,跨境购物已经成为越来越多消费者日常生活中的一部分。在这个过程中,反向海淘系统以其独特的优势,逐渐崭露头角,成为跨境电商领域的新星。作为一名在跨境反向海淘系统业务中耕耘了10年…

基于CycleGAN的图像风格转换

基于CycleGAN的图像风格转换 1.导入所需要的包和库:2.将一个Tensor转换为图像:3.数据加载:4.图像变换:5.加载和预处理训练数据:6.定义了一个残差块:7.生成器:8.判断器:9.数据缓存器&…

编写程序,提示用户输入以米/秒(m/s)为单位的速度v和以米/秒的平方(m/s)为单位的加速度 a,然后显示最短跑道长度。

(物理:求出跑道长度)假设一个飞机的加速度是a而起飞速度是v,那么可以使用下 面的公式计算出飞机起飞所需的最短跑道长度: 编写程序,提示用户输入以米/秒(m/s)为单位的速度v和以米/秒的平方(m/s)为单 位的加速度 a,然后显示最短跑道长度。下面…

LCM — Least Common Multiple 最小公倍数

因为任何一个数都可以表示为若干个质数幂的乘积。 比如75 3*5*5,即 2^0 * 3^1 * 5^2 * 7^0 ... 那么对于两个数来说,gcd就是他们取每个质数的较小幂的乘积,lcm则相反。显然,这些幂加起来就是他们乘积。 gcd(a,b) * lcm(a,b) a…

CorelDRAW2024发布更新啦!设计师们的得力助手

在数字化的今天,视觉设计已经成为我们生活中不可或缺的一部分。从手机界面到广告海报,从网页布局到包装设计,每一个细节都离不开设计师们的专业与创意。然而,面对日益增长的设计需求和不断提升的审美标准,许多设计师开…

【算法专题--栈】最小栈--高频面试题(图文详解,小白一看就会!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐解题方法--1 ⭐解题方法--2 四、总结 五、共勉 一、前言 最小栈这道题,可以说是--栈专题--,比较经典的一道题,也是在面试中频率较高的一道题目,通常在面试中,面试官可…

OpenAI发布GPT-4思维破解新策略,Ilya亦有贡献!

OpenAI正在研究如何破解GPT-4的思维,并公开了超级对齐团队的工作,Ilya Sutskever也在作者名单中。 论文地址:https://cdn.openai.com/papers/sparse-autoencoders.pdf 代码:https://github.com/openai/sparse_autoencoder 特征可…

【Unity游戏制作】地精寻宝Gnome‘s Well That Ends Well卷轴动作游戏【一】场景搭建

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 专栏交流🧧&…

Redisson分布式锁原理解析

前言 首先Redis执行命令是单线程的,所以可以利用Redis实现分布式锁,而对于Redis单线程的问题,是其线程模型的问题,本篇重点是对目前流行的工具Redisson怎么去实现的分布式锁进行深入理解;开始之前,我们可以…

MyBatis Plus<=3.5.6 存在 SQL 注入漏洞

MyBatis Plus<3.5.6 存在 SQL 注入漏洞 漏洞描述 MyBatis Plus 属于 MyBatis 的增强工具&#xff0c;目的时用于简化数据库开发&#xff0c;并提高开发效率。 收到 SQL 注入漏洞影响的版本&#xff0c;由于 UpdateWrapper 类未对用户可控的参数进行过滤导致存在 SQL 注入漏…