SQL深入探究存储的过程

 更新时间:2023年01月05日 08:56:18   作者:黑码哥  
存储过程是事先经经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于高效数据处理的效率是有好处的

现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同

时检查老师表里的数据。如果插入学生的老师不在老师表里,则先向老师表中插入一条老师数据,再向学生表中插入学生数据。

步骤:

使用SELECT语句查询新学生的老师是否存在于老师表中;

  • 如果不存在 ,则继续执行第2步;
  • 如果存在,则直接跳到第3步;

向老师表中插入老师数据;向学生表中插入学生数据

上方需求我们可以通过存储过程实现

存储过程简介

现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同

时检查老师表里的数据。如果插入学生的老师不在老师表里,则先向老师表中插入一条老师数据,再向学生表中插入学生数据

存储过程:一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,然后通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

存储过程的创建及调用

存储过程的创建:使用关键字CREATE PROCEDURE

存储过程的删除

如何删除存储过程

比如:现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同时检查老师表里的数据。如果插入学生的老师不在老师表里,则先向老师表中插入一条老师数据,再向学生表中插入学生数据。

CREATE PROCEDURE sp_add_student(
IN i_student_id VARCHAR(50), IN i_student_name VARCHAR(100),
IN i_gender VARCHAR(10), IN i_birth_day DATE,
IN i_age INT, IN i_class_id VARCHAR(50),
IN i_score DECIMAL(18,2), IN i_teacher_id VARCHAR(20)
)
BEGIN
IF NOT EXISTS(SELECT 1 FROM teacher WHERE teacher_id = 'i_teacher_id') THEN
INSERT INTO teacher(teacher_id) VALUES (i_teacher_id);
END IF;
INSERT INTO student VALUES(
i_student_id,i_student_name,i_gender,i_birth_day,
i_age, i_class_id, i_score, i_teacher_id
);
END;

存储过程的调用:使用关键字CALL

如:

CALL sp_add_student( 
'S20170091', '杨艳', '女', '2003-04-09',
15, 'G0206', 89.23, 'T0021' 
);

存储过程的删除:使用关键字DROP PROCEDURE

如:DROP PROCEDURE sp_add_student;

存储过程的优缺点

优点:

  • 功能强大、灵活性高;
  • 模块化,封装,代码复用;

缺点:

  • 开发调试困难;
  • 可移植性差,不同数据库,语法差别很大,移植困难;

到此这篇关于SQL深入探究存储的过程的文章就介绍到这了,更多相关SQL存储过程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • ubuntu系统中Mysql ERROR 1045 (28000): Access denied for user root@ localhost问题的解决方法

    ubuntu系统中Mysql ERROR 1045 (28000): Acces

    这篇文章主要介绍了ubuntu系统安装mysql登陆提示 解决Mysql ERROR 1045 (28000): Access denied for user root@ localhost问题,需要的朋友可以参考下
    2017-05-05
  • 如何恢复MySQL主从数据一致性

    如何恢复MySQL主从数据一致性

    MySQL主从数据一致性怎么恢复,MySQL主从数据库的数据不一致,猜测备库在同步过程中出现了问题,现在的问题很明确,就是如何恢复主从库数据的一致性,下文为大家分享解决方法,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • 解决Linux安装mysql 在/etc下没有my.cnf的问题

    解决Linux安装mysql 在/etc下没有my.cnf的问题

    这篇文章主要介绍了解决Linux安装mysql 在/etc下没有my.cnf的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Mysql8.0使用窗口函数解决排序问题

    Mysql8.0使用窗口函数解决排序问题

    窗口的概念非常重要,它可以理解为记录集合,窗口函数也就是在满足某种条件的记录集合上执行的特殊函数。这篇文章主要介绍了Mysql8.0使用窗口函数解决排序问题,需要的朋友可以参考下
    2020-01-01
  • mysql报错Duplicate entry ‘xxx‘ for key ‘字段名‘的解决

    mysql报错Duplicate entry ‘xxx‘ for key&nbs

    有时候对表进行操作,例如加唯一键,或者插入数据,会报错,本文就来介绍一下mysql报错Duplicate entry ‘xxx‘ for key ‘字段名‘的解决方法,感兴趣的可以了解一下
    2023-10-10
  • MySQL备份与恢复之热备(3)

    MySQL备份与恢复之热备(3)

    热备使用mysqldump命令进行备份,此工具是MySQL内置的备份和恢复工具,功能强大,它可以对整个库进行备份,可以对多个库进行备份,可以对单张表或者某几张表进行备份,需要了解的朋友可以参考下
    2015-08-08
  • linux配置mysql数据库远程连接失败的解决方法

    linux配置mysql数据库远程连接失败的解决方法

    这篇文章主要为大家详细介绍了linux配置mysql数据库远程连接失败的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • jdbc连接mysq之serverTimezone设定方式

    jdbc连接mysq之serverTimezone设定方式

    这篇文章主要介绍了jdbc连接mysq之serverTimezone设定方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Mysql 默认字符集设置方法(免安装版)

    Mysql 默认字符集设置方法(免安装版)

    有些时候我们在使用非安装版的mysql是需要设置默认字符集的时候,就需要这样的修改了。安装版的可以选择的。
    2009-03-03
  • mysql 单机数据库优化的一些实践

    mysql 单机数据库优化的一些实践

    这篇文章主要介绍了mysql 单机数据库优化的一些实践的相关资料,需要的朋友可以参考下
    2016-09-09

最新评论