数据库上机-创建存储过程

文章目录

目录

前言

一、数据库的存储过程是什么?

二、学习内容:

实施步骤与技术要点(附上代码和截图)

#(1)创建一个名为MyFun的不带参数的自定义函数,该函数的功能是查询c3课程的课程名,返回值为c3课程的课程名,并调用函数。

#(2)创建一个名为InsertFun的带参数的自定义函数,该函数的功能是向数据表C中插入课程的信息,返回值为“插入成功”,并调用函数。

#(3)创建一个名为MyProc的不带参数的存储过程,该存储过程的功能是从数据表S中查询所有男同学的信息,并执行存储过程。

#(4)创建一个名为InsertRecord的带参数的存储过程,该存储过程的功能是从数据表S中根据学号查询某一同学的信息,学号的值由参数提供,并执行存储过程。

#(5)创建一个一次性事件,在2分钟后向教师表T中添加一条教师信息('T6','赵六','男',36,'讲师',750,1300,'计算机'),执行后事件不会被删除,执行后事件不会被删除。

#(6)创建一个循环的事件,从现在开始,每分钟从数据表T查询的教师信息存储到一个新表TempTeach中,并在其创建时间的1个小时后过期。

#(7)创建一个游标,将课时不足80的课程,增加到90。

#(8)创建一个预处理语句,将通过学号和课程号查询成绩,给学号和课程号赋值,然后执行预处理语句。

总结


前言

创建存储过程


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

一、数据库的存储过程是什么?

存储过程(Stored Procedure)是一种预编译的程序,它存储在数据库中,并可以被多次调用。它是一组为了完成特定功能的 SQL 语句集合,经过编译并存储在数据库中,用户可以通过指定存储过程的名称并传递参数来调用它。 存储过程通常用于简化复杂的操作、提高数据库性能和安全性,减少网络流量等。相对于在应用程序中直接执行 SQL 语句,使用存储过程可以将 SQL 语句集中在数据库中进行管理,避免了代码重复和分散,提高了程序的模块化和可维护性。 存储过程具有以下特点:

  1. 存储过程是预编译的,可以提高查询的执行速度。
  2. 存储过程可以接受参数,并根据参数的不同执行不同的操作,提高了灵活性。
  3. 存储过程可以被多次调用,避免了代码的重复和分散。
  4. 存储过程可以实现复杂的业务逻辑,例如循环、分支等。
  5. 存储过程可以实现权限控制,保证数据库的安全性。 总之,存储过程是一种非常强大的数据库技术,可以提高数据库性能、安全性和可维护性,是使用 SQL 数据库的必备技能之一。

二、学习内容:

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

实施步骤与技术要点(附上代码和截图)

表的创建请参照 数据库上机实验-创建数据库和数据表_创建teach数据库_<自由舰>的博客-CSDN博客

#(1)创建一个名为MyFun的不带参数的自定义函数,该函数的功能是查询c3课程的课程名,返回值为c3课程的课程名,并调用函数。

SET GLOBAL log_bin_trust_function_creators = 1;
create FUNCTION Myfun()
RETURNS VARCHAR(20)
BEGIN
DECLARE Cname VARCHAR(20);
  select CN INTO Cname
    FROM c WHERE CNo = 'C3';
    RETURN Cname;
END;

SELECT Myfun();

 

#(2)创建一个名为InsertFun的带参数的自定义函数,该函数的功能是向数据表C中插入课程的信息,返回值为“插入成功”,并调用函数。

CREATE FUNCTION InsertFun(CNo VARCHAR(20),CN VARCHAR(20),CT INT)
RETURNS VARCHAR(20)
BEGIN 
 INSERT INTO c VALUES (CNo,CN,CT);
 RETURN '插入成功';
END;

SELECT InsertFun('C8','MySQL',32);

#(3)创建一个名为MyProc的不带参数的存储过程,该存储过程的功能是从数据表S中查询所有男同学的信息,并执行存储过程。

CREATE PROCEDURE MyProc()
BEGIN
    SELECT * FROM S WHERE Sex = '男';
END;

CALL MyProc();

 

#(4)创建一个名为InsertRecord的带参数的存储过程,该存储过程的功能是从数据表S中根据学号查询某一同学的信息,学号的值由参数提供,并执行存储过程。

CREATE PROCEDURE InsertRecord(in SNo VARCHAR(20))
BEGIN
 SELECT * FROM s WHERE s.SNo = SNo;
END;
CALL InsertRecord('148');

 

#(5)创建一个一次性事件,在2分钟后向教师表T中添加一条教师信息('T6','赵六','男',36,'讲师',750,1300,'计算机'),执行后事件不会被删除,执行后事件不会被删除。

CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 MINUTE
DO
    INSERT INTO T (TNo, TN, Sex, Age, Prof, Sal, Comm, Dept)
    VALUES ('T6', '赵六', '男', 36, '讲师', 750, 1300, '计算机');

 

#(6)创建一个循环的事件,从现在开始,每分钟从数据表T查询的教师信息存储到一个新表TempTeach中,并在其创建时间的1个小时后过期。

CREATE EVENT myevent
ON SCHEDULE EVERY 1 MINUTE
ON COMPLETION PRESERVE
DO
    CREATE TABLE TempTeach AS
    SELECT * FROM T; 
    ALTER TABLE TempTeach ADD COLUMN created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
    ALTER TABLE TempTeach ADD COLUMN expire_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP + INTERVAL 1 HOUR;
    ALTER EVENT myevent ON SCHEDULE EVERY 1 MINUTE DO DROP TABLE IF EXISTS TempTeach;

#(7)创建一个游标,将课时不足80的课程,增加到90。

DECLARE c_id VARCHAR(10);
DECLARE c_time INT;
DECLARE mycursor CURSOR FOR
SELECT CNo, CT FROM C WHERE CT < 80;
OPEN mycursor;
get_courses: LOOP
    FETCH mycursor INTO c_id, c_time;
    IF (c_time < 80) THEN
        UPDATE C SET CT = 90 WHERE CNo = c_id;
    END IF;
END LOOP get_courses;
CLOSE mycursor;

#(8)创建一个预处理语句,将通过学号和课程号查询成绩,给学号和课程号赋值,然后执行预处理语句。

总结

学习存储过程,让我更深入地理解了 SQL 数据库的使用和原理。通过存储过程,可以将复杂的业务逻辑封装在数据库中,减少了应用程序的代码量,提高了程序的可维护性和可读性。同时,存储过程还能够提高查询的执行速度,避免了重复编译和解析 SQL 语句的开销,对于数据量较大的应用场景尤为重要。 在学习存储过程的过程中,我了解了存储过程的语法和使用方法,学会了如何创建、执行、修改和删除存储过程,并且了解了存储过程的优缺点和使用场景。在实践中,我也发现了存储过程的一些注意事项,例如在编写存储过程时需要注意 SQL 注入的问题,需要谨慎处理输入参数,避免恶意用户利用存储过程攻击数据库等。 总之,学习存储过程是 SQL 数据库使用的重要组成部分,掌握存储过程的语法和使用方法,能够提高数据库的性能、安全性和可维护性,也是 SQL 数据库开发人员必备的技能之一。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值