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…

【鸿蒙】第2天・装饰器・组件和页面生命周期

背景知识 1・ArkTS 拓展了 TypeScript,TypeScript 拓展了 JavaScript。 增加了一些约束。 2・ArkTS 是声明式编程。 构建对象时类似构建者设计模式。链式赋值。 装饰器 @Component 自定义组件 Component装饰器仅能装饰str…

BGP中的TCP连接源地址问题

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

为何重要?解析企业实行网络安全等级保护的必要性

在全球信息化迅速发展的背景下,企业数据资产成为核心竞争力的重要组成部分。然而,随之而来的网络安全威胁亦日益严峻,从数据泄露到勒索软件攻击,每一次安全事件都可能给企业带来不可估量的损失。在此情境下,实行网络安…

Java IO: 使用 FileReader 和 FileWriter 进行文件操作

在 Java 中,进行文件操作是一个常见的任务。FileReader 和 FileWriter 是用于读取和写入文本文件的类,它们提供了一种方便的方法来处理文件内容。本文将介绍如何使用 FileReader 和 FileWriter,并提供一些示例代码。 FileReader 类概述 Fil…

使用PHP创建一个简单的Web爬虫

随着互联网的不断发展,信息的获取变得越来越方便。然而,海量的信息也给我们带来了很多的烦恼,如何高效地获取到我们所需要的信息就成了一项非常重要的任务。在实现自动化获取信息的过程中,web爬虫被广泛应用。 Web爬虫是一种自动…

R语言进行字符的替换和删减gsub,substr函数

目录 R语言读文件“-“变成“.“ 提取列字符前几个 提取列字符末尾几个 进行字母替换 paste0函数使用</

学计算机的学生假期可以干什么?

学习目标&#xff1a; 学计算机的学生假期可以干什么 学习内容&#xff1a; 实习&#xff1a;寻找计算机相关领域的实习机会&#xff0c;积累工作经验。这对你未来找工作非常有帮助。在线课程&#xff1a;参加编程、数据科学或其他技术领域的在线课程&#xff0c;提升技能。公…

python实现API调用缓存

python实现API调用缓存 1.代码2.输出3.保存的json数据 想把python某些函数的参数及返回值记录下来,如果之前已计算过,则直接返回缓存中的数据 1.代码 import jsondef get_variable_name(var):变量转变量名local_varsglobals()return [name for name, value in local_vars.ite…

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

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

redis分布式事务

1. 使用RedisTemplate.opsForValue().setIfAbsent(key, value, time, TimeUnit.SECONDS) 这种方法是基于Redis的SET命令的NX&#xff08;Not eXists&#xff09;选项和EX&#xff08;expiry time&#xff09;选项来实现的。它尝试设置一个键值对&#xff0c;只有当键不存在时才…

git-extras

当使用 git-extras 时&#xff0c;除了安装和基本命令之外&#xff0c;了解如何结合常见的 Git 工作流程和实际开发需求会更加有帮助。下面是一个更全面的 git-extras 使用教程&#xff0c;涵盖了安装、常见命令以及实际应用场景的示例。 1. 安装 git-extras 在 macOS 上&…

Java面试题:讨论单例模式的实现方式,包括懒汉式和饿汉式,并讨论线程安全问题

单例模式&#xff08;Singleton Pattern&#xff09;是一种设计模式&#xff0c;确保一个类只有一个实例&#xff0c;并提供一个全局访问点。单例模式在某些场景下很有用&#xff0c;例如配置管理、日志记录等。以下是单例模式的两种主要实现方式&#xff1a;懒汉式&#xff08…

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

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

备战秋招day7

很高兴又坚持了7天。 算法&#xff08;回溯&#xff09; 77. 组合 class Solution {List<Integer> list new LinkedList<>();List<List<Integer>> llist new LinkedList<>();public List<List<Integer>> combine(int n, int k)…

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

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

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

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

《Windows API每日一练》7.1 计时器基础知识

计时器&#xff08;Timer&#xff09;是一种在编程中用于测量时间间隔的机制。它允许程序在指定的时间间隔内执行特定的操作或触发事件。 本节必须掌握的知识点&#xff1a; 计时器 7.1.1 计时器 我们可以调用SetTimer函数为自己的Windows程序分配一个计时器。SetTimer包含一…