数据的创建、调用、修改、删除存储过程,以及第一类丢失更新(回滚丢失)和 第二类丢失更新(覆盖丢失/两次更新问题)

本文主要是介绍数据的创建、调用、修改、删除存储过程,以及第一类丢失更新(回滚丢失)和 第二类丢失更新(覆盖丢失/两次更新问题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据的创建存储过程、调用存储过程、修改存储过程、删除存储过程,以及第一类丢失更新(回滚丢失)和 第二类丢失更新(覆盖丢失/两次更新问题)

文章目录

  • 一、创建存储的语法
  • 二、调用存储过程
  • 三、修改存储过程
  • 四、删除存储过程
  • 五、**第一类丢失更新**(回滚丢失)
  • 六、**第二类丢失更新**(覆盖丢失/两次更新问题)


提示:以下是本篇文章正文内容,下面案例可供参考

一、创建存储的语法

CREATE PROCEDURE 过程名称( [ [输入输出类型] 参数名 参数类型(宽度) , ... ] ) 
BEGINSQL语句块
END $

其中输出输入的参数类型有以下三种:

  • IN :表示输入参数

    • 仅能从存储过程的调用者向存储过程传递数据(即由外向内传递)
  • OUT :表示输出参数

    • 仅能从存储过程内部将数值传递给存储过程的调用者(即由内向外传递)
  • INOUT :表示输入输出参数

    • 既能从存储过程的调用者向存储过程传递数据(即由外向内传递)
    • 又能从存储过程内部将数值传递给存储过程的调用者(即由内向外传递)
mysql> CREATE PROCEDURE register(IN userName VARCHAR(20),IN userPass VARCHAR(20),OUT userId INT)-> BEGIN-> INSERT INTO UserInfo(userName,userPass)VALUES(userName,userPass);-> SELECT LAT_INSERT_ID() INTO userId;-> END $

在这里插入图片描述
其中:

mysql> DELIMITER $

是来修改 定界符

之后遇到修改后的定界符就表明语句结束(因为语句中有原本的分界符,会冲突),等到存储过程创建完毕则需要将 定界符 修改为默认的 ;

DELIMITER ;

二、调用存储过程

在 MySQL 中调用存储过程可以通过 CALL 命令来实现:
代码如下(示例):

CALL 过程名称( [实参列表] )

根据实际情况为 存储过程 传递参数。

如果参数类型为 OUTINOUT 则需要定义变量并将变量作为存储过程的参数使用。

三、修改存储过程

代码如下(示例):

ALTER PROCEDURE 过程名称 [特征];
mysql> ALTER PROCEDURE register;

在这里插入图片描述

四、删除存储过程

通过 drop procedure 命令可以删除存储过程:

DROP PROCEDURE [IF EXISTS] 过程名称;

五、第一类丢失更新(回滚丢失)

隔离级别较高的:
在这里插入图片描述
隔离级别较低的:
在这里插入图片描述
但在MySQL数据库,任何隔离级别不允许第一类更新丢失。

六、第二类丢失更新(覆盖丢失/两次更新问题)

隔离级别较高的:
在这里插入图片描述
隔离级别较低的:
在这里插入图片描述
第二类丢失更新原因:MySQL可重复读默认采用的是快照读。快照读的一个问题也就是没有办法获取最新的数据。所以快照读是第二类更新丢失的一个主要原因。


这篇关于数据的创建、调用、修改、删除存储过程,以及第一类丢失更新(回滚丢失)和 第二类丢失更新(覆盖丢失/两次更新问题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/576737

相关文章

MySQL安装时initializing database失败的问题解决

《MySQL安装时initializingdatabase失败的问题解决》本文主要介绍了MySQL安装时initializingdatabase失败的问题解决,文中通过图文介绍的非常详细,对大家的学... 目录问题页面:解决方法:问题页面:解决方法:1.勾选红框中的选项:2.将下图红框中全部改为英

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

Rust中的BoxT之堆上的数据与递归类型详解

《Rust中的BoxT之堆上的数据与递归类型详解》本文介绍了Rust中的BoxT类型,包括其在堆与栈之间的内存分配,性能优势,以及如何利用BoxT来实现递归类型和处理大小未知类型,通过BoxT,Rus... 目录1. Box<T> 的基础知识1.1 堆与栈的分工1.2 性能优势2.1 递归类型的问题2.2

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

SpringBoot整合easy-es的详细过程

《SpringBoot整合easy-es的详细过程》本文介绍了EasyES,一个基于Elasticsearch的ORM框架,旨在简化开发流程并提高效率,EasyES支持SpringBoot框架,并提供... 目录一、easy-es简介二、实现基于Spring Boot框架的应用程序代码1.添加相关依赖2.添

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O