Mysql存储过程用法:使用存储过程编程,来判断数据库中数据表中的字段是否重复,避免重复插入记录

目录

一、mysql的存储过程介绍

二、. 创建存储过程

1、准备

2、创建插入记录的存储过程

三. 调用存储过程

四. 删除存储过程

五. 修改存储过程,避免数据表的姓名出现重复

1、修改存储过程的方式

2、重新创建存储过程

六. 验证新的存储过程

1、插入新的记录

2、插入名称相同的记录

(1)直接调用存储过程插入名称相同的记录

(2)只对记录名进行修改


一、mysql的存储过程介绍

        MySQL的存储过程是一组为了完成特定功能的SQL语句集合,它被编译并存储在数据库中,可被数据库的客户端程序反复调用。存储过程由SQL语句组成,包括声明、SQL语句、控制结构以及异常处理等。存储过程可以提高SQL代码的重用性,减少网络通信量,提高性能,并允许数据库管理员和开发人员在数据库层面上实施复杂的业务逻辑。

        类似于系统的shell脚本,或者编程语言中的函数等。

二、. 创建存储过程

1、准备

        假设我们有一个名为`trainees`的表,并且我们想要创建一个存储过程来插入一个新的学员记录。

        首先,确保`trainees`表存在,并且有一个合适的结构。例如:

CREATE TABLE trainees (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT,grade VARCHAR(10)
);

        接着,在navicat中实际操作,效果如下图所示:

        最后,查看表是否存在,操作如下图示:

2、创建插入记录的存储过程

        确认数据表存在后,我们可以创建一个存储过程来插入新的学员记录:

DELIMITER //
CREATE PROCEDURE InsertTrainee(IN p_name VARCHAR(50), IN p_age INT, IN p_grade VARCHAR(10))BEGININSERT INTO trainees (name, age, grade) VALUES (p_name, p_age, p_grade);SELECT 'New trainee inserted successfully!';
END //
DELIMITER ;

        在这个例子中,我们使用了`DELIMITER`来改变命令提示符,以便在存储过程中使用多个语句。`InsertTrainee`是存储过程的名称,它接受三个输入参数:`p_name`、`p_age`和`p_grade`。

        在存储过程的主体中,我们使用这些参数来插入一个新的学员记录,并返回一个消息确认插入成功。

        实际操作如下图所示:

       接着,可以在navicat中查看数据库的“函数”选项,选中“InsertTrainee”,如下图示,表明存储过程正确的创建好了。

三. 调用存储过程

        一旦创建了存储过程,就可以通过指定存储过程名和参数(如果有的话)来调用它。以下是如何调用上面创建的`InsertTrainee`存储过程的例子:

        CALL InsertTrainee('John Doe', 20, 'A');

        这将在`trainees`表中插入一个新的学员记录,并返回一条消息确认插入成功。

        在navicat中查看数据表,如下图所示:

        可以看出,数据记录插入成功。

四. 删除存储过程

如果不再需要某个存储过程,可以使用`DROP PROCEDURE`语句来删除它:

        DROP PROCEDURE IF EXISTS InsertTrainee;

        这将会删除名为`InsertTrainee`的存储过程(如果存在的话)。使用`IF EXISTS`子句可以防止在存储过程不存在时产生错误。

五. 修改存储过程,避免数据表的姓名出现重复

1、修改存储过程的方式

        如果需要修改存储过程,可以使用`ALTER PROCEDURE`语句。但是,请注意,直接修改存储过程可能会导致意外的副作用。通常,更好的做法是先删除旧的存储过程,然后创建一个新的。以下是如何删除和重新创建存储过程的例子:

-- 删除存储过程

DROP PROCEDURE IF EXISTS InsertTrainee;

        实际操作如下:

2、重新创建存储过程

        重新编写存储过程如下:

-- 重新创建存储过程(假设想要修改它)
DELIMITER //
CREATE PROCEDURE InsertTrainee(IN p_name VARCHAR(50), IN p_age INT, IN p_grade VARCHAR(10))
BEGIN-- 假设我们添加了一些额外的逻辑DECLARE trainee_exists INT;SELECT COUNT(*) INTO trainee_exists FROM trainees WHERE name = p_name;IF trainee_exists = 0 THENINSERT INTO trainees (name, age, grade) VALUES (p_name, p_age, p_grade);SELECT 'New trainee inserted successfully!';ELSESELECT 'Trainee with the same name already exists.';END IF;
END //
DELIMITER ;

        这样,我们修改存储过程的代码,也就是添加了一些额外的逻辑来检查是否已经存在具有相同姓名的学员。

        若不存在,直接添加记录;若已经存在,提示“... the same name already exists.”,不做任何添加。

       接着,可以在navicat中查看数据库的“函数”选项,选中“InsertTrainee”,如下图示,表明新的存储过程正确的创建好了。

六. 验证新的存储过程

1、插入新的记录

结果1提示插入成功,然后在navicat中输入select语句查询数据表,结果如下:

可以看出,新的记录插入成功完成。

2、插入名称相同的记录

(1)直接调用存储过程插入名称相同的记录

        直接调用存储过程插入名称相同的记录,但是其他字段不同的记录,如下所示:

        结果1显示:Trainee with the same name already exists.说明有同名的记录存在。

        显然插入记录没有成功。

(2)只对记录名进行修改

        最对新的记录名字修改,其他不改动,操作如下图所示:


结果1显示:新的记录插入成功。

查看目前表中记录,如下图所示,新的记录已经存在,显然重新插入新的记录成功。


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


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

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

相关文章

高考后的抉择:专业优先还是学校优先?

随着2024年高考的帷幕落下,高考生们面临的一个重要抉择再度浮上心头:在分数受限的情况下,是选择一个心仪的专业,还是选择一个知名度更高的学校?这是一个困扰了众多考生和家长的长期难题。在这个关键的时刻,…

好用的导航网站有哪些

网址导航网站是我们日常上网的一个重要工具。它们不仅可以帮助我们快速找到所需的资源和信息,还能提高我们的工作效率。以下是小编收藏的几个好用的导航网站,涵盖了办公、学习、娱乐等多个领域,分享给大家。 1. 办公人导航 办公人导航是一个…

Drag Select Compose:实现多平台图片多选功能的利器

Drag Select Compose:实现多平台图片多选功能的利器 在现代移动应用开发中,图片多选功能是一个常见且实用的需求。而实现这种功能可能涉及到复杂的手势处理和状态管理。今天,我将介绍一款强大的Compose多平台库——Drag Select Compose,它能够轻松实现类似于Google Photos…

BGP中的TCP连接源地址问题

3.TCP连接源地址(用loop back地址是最优选择) 应用场景与理论: 由于BGP应用于大型网络中,为了避免单点失败,往往需要通过多条链路连接,当一条链路故障时候就用另一条链路继续工作,但是BGP又无法…

螺旋模型:结合瀑布模型和增量模型的项目管理利器

目录 前言1. 螺旋模型概述1.1 螺旋模型的核心理念1.2 螺旋模型的四个阶段 2. 螺旋模型的详细步骤2.1 计划阶段2.2 风险分析阶段2.3 工程阶段2.4 评估阶段 3. 螺旋模型在大型项目中的应用3.1 应对需求变化3.2 有效的风险管理3.3 增强的客户参与3.4 灵活的资源分配 4. 螺旋模型的…

【Python】已解决:FileNotFoundError: [Errno 2] No such file or directory: ‘配置信息.csv‘

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:FileNotFoundError: [Errno 2] No such file or directory: ‘配置信息.csv’ 一、分析问题背景 在编写Python代码进行文件操作时,开发者可能会遇到…

精品UI知识付费系统源码网站EyouCMS模版源码

这是一款知识付费平台模板,后台可上传本地视频,批量上传视频连接, 视频后台可设计权限观看,免费试看时间时长,会员等级观看,付费观看等功能, 也带软件app权限下载,帮助知识教育和软件…

制造企业的仓库管理如何做好数据分析?

在竞争激烈的现代制造业环境中,仓库管理成为许多生产制造企业面临的一大挑战。随着产品种类的不断增加和客户需求的日一个型号,仓库不仅要处理物料、半成品和成品,还要应对产品更新换代、不同项目客户的特殊需求等复杂因素。面对这些挑战&…

C++实现简化版Qt信号槽机制(2):增加内存安全保障

在上一篇文章中《C实现一个简单的Qt信号槽机制》,我们基于前面的反射代码实现了信号槽的功能。 但是上一篇的代码中没有对象生命周期管理的机制,如果在对象的生命周期结束后还存在未断开的信号和槽连接,那么信号触发时可能会尝试访问已经被析…

ValidateAntiForgeryToken、AntiForgeryToken 防止CSRF(跨网站请求伪造)

用途&#xff1a;防止CSRF&#xff08;跨网站请求伪造&#xff09;。 用法&#xff1a;在View->Form表单中: aspx&#xff1a;<%:Html.AntiForgeryToken()%> razor&#xff1a;Html.AntiForgeryToken() 在Controller->Action动作上&#xff1a;[ValidateAntiForge…

Java的IO体系

目录 1、Java的IO体系2、IO的常用方法3、Java中为什么要分为字节流和字符流4、File和RandomAccessFile5、Java对象的序列化和反序列化6、缓冲流7、Java 的IO流中涉及哪些设计模式 1、Java的IO体系 IO 即为 input 输入 和 output输出 Java的IO体系主要分为字节流和字符流两大类…

防爆配电箱航空插头正确安装

防爆配电箱航空插头的安装确实有特殊要求&#xff0c;这些要求旨在确保配电箱在潜在危险环境中的安全运行。以下是一些关键的安装要求&#xff1a; 安装环境&#xff1a;防爆配电箱应安装在危险区域之外的安全地点&#xff0c;远离潜在的爆炸源和危险物质。安装环境应保持干燥、…

17859划分准则小结

17859《划分准则》 发布时间&#xff1a;1999.9.13 实施时间&#xff1a;2001.1.1 计算机信息系统安全保护能力的五个等级&#xff1a; 第一级&#xff1a;用户自主保护级 第二级…

rtthread stm32h743的使用(十一)spi设备使用

我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验&#xff0c;核心板如图&#xff1a; 1.建立新工程&#xff0c;选择相应的芯片型号及debug引脚及调试器 2.编译下载&#xff0c;可以看到串口打印正常 3.…

python查找支撑数 青少年编程电子学会python编程等级考试三级真题解析2022年3月

目录 python查找支撑数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python查找支撑数 2022年3月 python编程等级考试级编程题 一、题目要求…

RabbitMQ 的经典问题

文章目录 前言一、防止消息丢失1.1 ConfirmCallback/ReturnCallback1.2 持久化1.3 消费者确认消息 二、防止重复消费三、处理消息堆积四、有序消费消息五、实现延时队列六、小结推荐阅读 前言 当设计和运维消息队列系统时&#xff0c;如 RabbitMQ&#xff0c;有几个关键问题需…

第100+13步 ChatGPT学习:R实现决策树分类

基于R 4.2.2版本演示 一、写在前面 有不少大佬问做机器学习分类能不能用R语言&#xff0c;不想学Python咯。 答曰&#xff1a;可&#xff01;用GPT或者Kimi转一下就得了呗。 加上最近也没啥内容写了&#xff0c;就帮各位搬运一下吧。 二、R代码实现决策树分类 &#xff08;…

【漏洞复现】宏景HCM人力资源信息管理系统——任意文件读取漏洞

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 宏景HCM人力资源信息管理系统是一款全面覆盖人力资源管理各模块…

docker pull 镜像的时候遇到Pulling fs layer问题

最近遇到一个很奇怪的问题,docker pull 镜像的时候,总是出现Pulling fs layer问题,导致镜像拉取不成功,以前是安装好docker,正常拉取镜像都是没什么问题的,在这里记录一下这个问题的解决方法,当然,可能并不通用。 1、进入阿里云容器服务 地址:https://cr.console.aliy…

【Django】网上蛋糕项目商城-热销和新品

概念 本文将完成实现项目的热销和新品两个分类的商品列表进行分页展示。 热销和新品功能实现步骤 在head.html头部页面中点击这两个超链接向服务器发送请求。 在urls.py文件中定义该请求地址 path(goodsrecommend_list/,views.goodsrecommend_list) 在views.py文件中定义g…