第六章总结(创建与使用存储过程)

2023-05-16

一、MySQL的存储过程
(1)存储过程是一组为了完成特定功能的SQL语句块,经编译后存储在数据库中,用户通过指定存储过程的名称并给定参数(如果该存储过程带有参数)来调用并执行它,存储过程能重复使用,这样可以大大减少数据库开发人员的工作量。

存储过程主要有以下优点:

①执行效率高,②灵活,③数据独立:用户在程序中调用存储过程,存储过程能把数据同用户程序隔离开,其优点是当数据表结构变化时,可以随时修改存储过程,不用修改程序源代码。

④安全:存储过程可被作为一种安全机制来充分利用,系统管理员通过设置存储过程的访问权限,从而实现相应数据的访问权限限制,避免了用户对数据表的直接访问,保证了数据的安全。

⑤降低网络流量:当在客户机上调用该存储过程时,网络中传送的只是该调用语句,而不是这一功能的全部代码,从而大大降低了网络负载。

(2)DELIMITER命令。DELIMITER命令用于更改MySQL语句的结束符,如将默认结束符“;”更改为“$$”,避免与SQL语句默认结束符相冲突,其语法格式为:

DELIMITER <自定义结束符>

DELIMITER $$在存储过程编写结束后恢复使用MySQL的默认结束符“;”,例如:

DELIMITER;

(3)创建简单存储过程。创建存储过程的语法格式为:

CREATE PROCEDURE存储过程名()

BEGIN

        <存储过程体>

END;

说明:存储过程名应符合MySQL的命名规则,避免使用与MySQL的内置函数相同的名称。

(4)查看存储过程。查看存储过程的语法格式为:

SHOW PROCEDURE STATUS[LIKE<存储过程模糊名>];

SHOW PROCEDURE STATUS proc601;

MySQL中存储过程的信息存储在information_schema数据库下的 Routines 表中,也可以通过查询该数据表的记录来查询存储过程的信息,例如:

SELECT *FROM information_schema. Routines WHERE Routine_name="proc601";

(5)调用简单存储过程。存储过程创建完成后,可以在程序、触发器或其他存储过程中被调用,其语法格式为:

CALL存储过程名();

(6)删除存储过程。在命令行中删除存储过程的语法格式为:

DROP PROCEDURE<存储过程名>;

二、创建带输入参数的存储过程
1.MySQL 带输入参数的存储过程的创建
创建带输入参数的存储过程的语法格式为:

CREATE PROCEDURE存储过程名([形参列表])

BEGIN
<存储过程体>
END;

说明:存储过程可以不使用参数,也可以带一个或多个参数。

如果有多个参数,各个参数之间使用半角逗号分隔。参数的定义格式为:

[In]<参数名><参数类型>

2.调用存储过程
存储过程创建完成后,可以在程序、触发器或其他存储过程中被调用,其语法格式为:

CALL存储过程名([<实参列表>]);

        说明:如果定义存储过程时使用了参数,那么调用该存储过程时,也要使用参数,并且参数个数和顺序必须一一对应。

三、创建带输入和输出参数的存储过程
MySQL带输入和输出参数的存储过程创建的语法格式如下:CREATE PROCEDURE存储过程

([形参列表])BEGIN

<存储过程体>

END;

说明:存储过程可以使用输入、输出和输入/输出参数。

参数的定义格式为:

[In|Out|InOut]<参数名><参数类型>

MySQL的存储过程支持3种类型的参数:输入类型、输出类型和输入/输出类型,关键字分别使用In、Out、InOut,省略参数传递类型默认为In.

四、创建应用游标的存储过程
为了方便用户对结果集中单条的记录行进行访问,MySQL提供了游标这种特殊的访问机制,它具有在查询结果集中向前或向后浏览数据、处理结果集中数据的能力。

MySQL 带游标的存储过程
(1)声明游标。其语法格式为:

DECLARE<游标名>CURSOR FOR<select 语句>;

说明:游标名称必须符合MySQL标识符的命名规则,select语句返回一行或多行记录数据,但不能使用into子句。

(2)打开游标。其语法格式为:

OPEN<游标名>;

说明:打开一个已经声明过的游标。

(3)读取游标。其语法格式为:

FETCH<游标名>INTO变量名1[,变量名2]···

说明:在指定打开的游标读取一行数据并赋给对应的变量,并且游标指针下移,向结果集的下一行。
(4)关闭游标。其语法格式为:

CLOSE<游标名>;

说明:关闭一个之前打开的游标。

五、创建与使用事务
在MySQL操作过程中,一般简单的业务逻辑或中小型程序不用考虑应用事务。但在比较复杂的情况下,如果可能出现多项并行业务逻辑,就必须保证命令执行的同步性。使执行序列中,有关联的语句执行能够全部操作成功或全部返回初始状态。

1.事务的ACID特性
(1)原子性。一个事务(transaction)中的所有操作,要么全部执行,要么全部不执行。

(2)一致性。在事务开始之前和事务结束以后,数据库的完整性没有被破坏。

(3)隔离性。MySQL数据库允许多个并发事务,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

(4)持久性。事务处理结束后,对数据的修改就是永久的。

2.事务控制语句
(1)开始事务。其语法格式为:

START TRANSACTION;

说明:用于显式地启动一个事务。

(2)提交事务。其语法格式为:

COMMIT;

说明:用于提交事务,将事务对数据所做的修改进行保存。

(3)设置保存点。其语法格式为:

SAVEPOINT<保存点名称>;

说明:用于在事务内设置保存点。

(4)撤销事务。其语法格式为:

ROLLBACK;(一般用这个语句)

        说明:撤销事务又称为事务回滚,即事务被执行后,如果执行的SQL语句导致业务逻辑不符或数据库操作错误,ROLLBACK语句撤销事务中所有的执行语句。

ROLLBACK TO SAVEPOINT<保存点名称>;ROLLBACK TO SAVEPOINT 语句撤销事务中保存点之后的执行语句

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第六章总结(创建与使用存储过程) 的相关文章

  • javascript 数组方法 slice() 的使用说明

    slice 的英译为 切片的意思 xff0c 就是截取一个片段 javascript的数组对象有一个方法slice xff0c 通过索引位置从原数组中截取一个片段构成新的数组 xff0c 该方法不会修改原数组 xff0c 只是返回一个新的子
  • 洛谷p2078

    分析 xff1a 啊这 xff0c 居然让我这个单身汉来配情侣 xff0c 我可以配 1对吗 认真分析 xff1a 把小明的朋友和他朋友的朋友和他朋友的朋友的 的朋友的父节点都变成小明 xff0c 然后统计小明这个集合有多少元素 xff0c
  • 22. Spring Boot 整合 MyBatis-Plus

    文章目录 22 1 官方文档22 2 基本介绍22 3 整合 MyBatis Plus 实例22 3 1 需求说明 图解22 3 2 代码实现22 3 2 1 创建数据库和表22 3 2 2 创建 springboot mybatisplu
  • openjudge 1.4.11 晶晶赴约会

    OpenJudge 11 晶晶赴约会 解题思路 xff1a 1 判断晶晶是否可以去约会 xff0c 那么只需要判断输入的日期是否为1 3 5中的任意一个数字即可 2 定义整型变量a并输入 3 If else条件判断 xff0c 并输出对应内
  • HTML制作个人名片

    题目 xff1a 完成以下效果图 xff0c 上传代码和效果图 xff08 具体样式提示如下 xff1a 整个大盒子尺寸为 150 278 效果图居中对齐 xff0c 左右外边距50px 字体 xff1a 楷体 xff1b 2 段落设置 x
  • 原码,反码,补码的概念

    计算机里都是以补码 的形式存储数据 xff0c 电脑只能识别二进制的0和1 xff0c 一个字节 xff08 8位 xff09 为例 原码 xff1a 最高位符号位 xff0c 0代表正数 xff0c 1代表负数 xff0c 非符号位为该数
  • cmake编译opencv开源项目报错问题

    最近使用cmake在编译一个配置了opencv环境的c 43 43 开源项目时遇到如下问题 CMake Warning at D opencv4 OpenCVConfig cmake 176 message Found OpenCV Win
  • 第一个SpringBoot项目的创建

    目录 一 SpringBoot是什么 xff1f 初识springboot springboot的优点 二 SpringBoot项目的创建与简单运行 x1f351 使用idea创建springboot项目 x1f351 Spring Boo
  • 解决在vue3中使用reactive响应式,赋值后造成页面不改变的问题?

    文章目录 场景原因一 例子二 解决方法1 使用ref存储响应式数据2 在reactive中使用对象包裹要改变的数据3 for of循环push到reactive数据中 xff0c 不破坏数据结构 总结 场景原因 我们需要在vue3中使用服务
  • ubuntu交叉编译工具arm-linux-gcc安装

    1 安装交叉编译工具 xff1a arm linux gcc 安装包4 4 6 TQ210 release 20120720 tar bz2 环境 xff1a ubuntu 20 版 xff0c 已换清华源 1 1解压文件 提取解压1 1
  • MYSQL(1)----初阶

    一 新增 insert into 表名 values 列的值 xff0c 列的值 xff0c 列的值 xff0c 列的值 insert into 表名 字段1 xff0c 字段2 values 列的值 xff0c 列的值 列的值 xff0c
  • GitLab -- 创建新用户

    登录GitLab xff0c 点击最上面的扳手图标 xff0c 进入 管理区域 页面 xff0c 点击 新建用户 进入新建用户页面 xff0c 输入对应信息 信息确认后 xff0c 点击 创建用户 用户创建成功后 xff0c 点击 编辑 按
  • debian技能大赛 笔记 (一)静态IP 网卡重启

    一 Debian静态IP 1 使用vim打开 etc network interfaces配置文件 vim etc network interfaces 2 在配置文件里添加 auto 网卡号 allow hotplug 网卡号 iface
  • Debian技能大赛笔记(二)service 、systemctl等命令消失不见解决办法

    二 service systemctl等命令消失不见解决办法 1 使用命令进入root模式 wt 64 Rserver su root Password root 64 Rserver home wt 2 使用vim 使用vi或者nano都
  • debian技能大赛笔记(八)创建DISK RAID5 自动挂载

    一 问题 1 在虚拟机上添加四个1g的硬盘 2 创建raid5 其中一个作为热备盘 设备名为 md0 3 将md0设置为LVM 设备名为md0 4 格式化为ext4 文件系统 5 开机自动挂载到 data目录 添加硬盘 添加完几个硬盘虚拟机
  • Debian大赛笔记(十)修改系统语言

    1 在root用户下输入 dpkg reconfigure locales 选择ZH CN xff08 简体中文 xff09 按空格键选择 xff0c 选择成功后重启系统语言便会修改成功
  • Debian技能大赛笔记(11)欢迎信息内容配置 删除欢迎信息

    技能大赛里都有一个差不多的题就是做一个欢迎信息 大致就像下图 那怎么配置呢 1 进入配置文件 vim etc update motd d 10 uname 在配置文件里加入 uname snrvm printf n printf 2s Ch
  • 上班摸鱼看小说的最佳软件

    这个软件几乎满足了我对上班摸鱼的所有担忧 xff0c 比如上班的时候打开网页看下说 xff0c 那太明显了 xff0c 不说摄像头 xff0c 后台看一下浏览器历史记录就暴露的特别明显 xff0c 这合适吗 xff1f 老板来到你身后远远的
  • iOS-UI-导航控制器-导航栏

    文章目录 导航控制器导航控制器的基本创建方法导航控制器的基本框架如下图所示添加单个按钮 x1f518 添加多个按钮 x1f518 创建按钮数组导航控制器效果 导航控制器的切换VcRoot界面切换事件函数 导航控制器 导航控制器 xff1a
  • 【iOS开发】-UIViewController加载过程和生命周期

    文章目录 前言ViewController执行过程的探讨ViewControllerOne 函数介绍顺序引入ViewControllerSecond引入 ViewControllerOne点击执行到ViewControllerSecond的

随机推荐

  • 【C语言】魔方阵的实现(最全)

    魔方阵的实现 xff08 最全 xff09 一 什么是魔方阵 xff1f 魔方矩阵 xff0c 又称幻方 xff0c 是具有相同的行数和列数 xff0c 并在每行每列 对角线上的和都相等的矩阵 N阶幻方 xff0c 即将自然数1到排成N行N
  • 四种求最大公约数的算法 C / C++

    文章目录 前言一 辗转相除法1 算法简介2 算法描述3 代码及复杂度 二 穷举法 xff08 枚举法 xff09 1 算法简介2 算法描述3 代码及复杂度 三 更相减损法1 算法简介2 算法描述3 代码及复杂度 四 Stein算法 xff0
  • 安装使用supervisor来启动服务

    supervisor 使用方法 supervisor 官网 是一个unix的系统进程管理软件 xff0c 可以用它来管理apache nginx等服务 xff0c 若服务挂了可以让它们自动重启 当然也可以用来实现golang的守护进程 学完
  • 超详细讲解实现拓扑排序、关键路径

    今天 xff0c 小编带着大家来学习图中非常重要的一环 xff0c 拓扑排序和关键路径 xff01 目录 一 绪论 实际应用 二 拓扑排序 xff08 一 xff09 含义 xff08 二 xff09 实现原理 xff08 三 xff09
  • getline函数介绍

    今天 xff0c 小编将为大家讲解有关getline函数的相关知识 目录 一 cin getline char s streamsize n char delim 二 getline istream amp is string amp st
  • C++语法——详解运算符重载

    运算符重载是C 43 43 的一个重要特性 有了运算符重载 xff0c 在代码编写时能更好的实现封装 目录 一 运算符重载介绍 二 运算符重载形式 xff08 一 xff09 参数 xff08 二 xff09 返回值 xff08 三 xff
  • linux—常用gdb调试命令汇总

    目录 一 准备工作 二 调试命令 xff08 一 xff09 查看代码内容 xff08 l xff08 二 xff09 开始调试 xff08 r xff09 xff08 三 xff09 查看当前调试位置 xff08 where xff09
  • Linux——详细模拟实现shell(进程控制综合运用)

    在运行linux时 xff0c 我们总免不了需要输入各种指令让shell进行解析 xff0c 从而与系统进行交互 那么我们有没有可能自己自制一个简易的shell呢 xff1f 答案是当然没问题 目录 一 大体思路 二 具体实现 xff08
  • C++语法——详解虚继承

    目录 一 什么是虚继承 二 虚继承原理 三 虚继承使用注意事项 一 什么是虚继承 所谓虚继承 xff08 virtual xff09 就是子类中只有一份间接父类的数据 该技术用于解决多继承中的父类为非虚基类时出现的数据冗余问题 xff0c
  • Qt——基本介绍、详解对象树

    目录 一 基本介绍 二 对象树 一 基本介绍 创建qt项目是 xff0c 如果选择空窗口QWidget xff0c 那么mian函数中会有如下代码 xff1a include 34 myWindow h 34 include lt QApp
  • 项目:手把手实现高并发内存池

    一 前言 xff08 一 xff09 项目简介 高并发内存池 xff08 ConCurrentMemoryPool xff09 xff0c 其原型是google的开源项目tcmalloc 全称是t hread c ache malloc x
  • Linux——TCP协议与相关套接字编程

    一 TCP协议概念 与UDP协议相同 xff0c TCP协议也是应用在传输层 的协议 虽然都是应用在传输层 xff0c 但是使用方式和应用场景上大不一样 TCP协议具有 xff1a 有连接 xff08 可靠 xff09 面向字节流的特点 x
  • C++ Primer笔记——排列算法(next_permutation、prev_permutation、is_permutation)

    目录 概述 next permutation prev permutation is permutation 概述 页数 xff1a P778 xff08 A 2 7 排列算法 xff09 头文件 xff1a lt algorithm gt
  • Ubuntu更改JupyterLab的工作目录

    1 第一步 jph 64 jph opt anaconda3 jupyter lab generate config Writing default config to home jph jupyter jupyter lab config
  • 项目5 创建与使用视图

    1 简单化 视图不仅可以简化用户对数据的理解 xff0c 也可以简化对数据的操作 那些被经常使用的查询定义为视图 xff0c 从而使用户在以后的操作中不必每次都指定全部的条件 2 安全性 通过视图用户只能查询和修改他们所能见到的数据 xff
  • 第五章习题(1)

    int main int k x for k 61 0 x 61 0 k lt 61 9 amp amp x 61 10 k 43 43 x 61 x 43 2 printf 34 d d 34 k x return 0 习题2 int m
  • 数据库表的约束

    单字段主键 create table表名 字段名1数据类型1comment 34 备注信息1 34 primary key 字段名2数据类型2comment 34 备注信息2 34 create table teacher no varch
  • 数据库第三次作业

    如下表新增数据 xff1a 教师表 teacher 指定字段插入数据 教师号 教师姓名 职称 工资 岗位津贴 T1 Anne Professor 5000 2000 T2 Adam 2000 T3 Alan Associate Profes
  • 数据库第七次作业

    更新教师表中所有记录 xff0c 将津贴改为2000 更新教师表中教师号在T5到T8之间的记录 xff0c 将津贴改为1500 更新授课表中周数为8的记录 xff0c 将教师号改为T7 xff0c 课程号改为C1 更新课程表中课时数不在45
  • 第六章总结(创建与使用存储过程)

    一 MySQL的存储过程 xff08 1 存储过程是一组为了完成特定功能的SQL语句块 xff0c 经编译后存储在数据库中 xff0c 用户通过指定存储过程的名称并给定参数 xff08 如果该存储过程带有参数 xff09 来调用并执行它 x