触发器、存储过程的建立与使用—实验报告

一、实验目的

 了解触发器和存储过程的概念和作用,掌握创建和使用触发器、存储过程的方法,为后继学习和开发程序作准备。

二、实验属性

    1、了解触发器、存储过程的作用。

    2、了解并掌握触发器、存储过程的创建及使用。

三、实验仪器设备及器材

    1、预习教材第五章,熟悉触发器、存储过程创建的语句。

    2、熟悉SQL SERVER2008

    3、能够熟练掌握SQL SERVER2008环境下的触发器、存储过程的创建。

四、实验要求

    1、预习教材第五章,熟悉触发器的创建语句。

    2、熟悉SQL SERVER2008开发环境。

    3、了解并掌握查看、修改和删除触发器的方法。

    4、掌握验证触发器的效果。

五、 实验原理

    触发器的了解和掌握。

六、实验内容

  1、创建触发器

   1.1、请自己创建两个表:WorkerDeptsWorker表中有三列,工号 char(15),姓名 char(20),部门号 char(10),工资

        intDepts表中有三列,部门号 char(10),部门名 char(20),部门人数 int。在此表中插入几条数据。请创建一个触发器,         当在此表中删除数据后,弹出“请注意你删除了数据”。

   1.2、接着在创建一个触发器,当删除数据后,弹出“请注意你删除了某个人的数据”。

   1.3、在Worker表上创建一个触发器,当插入数据时,工资不小于1200元。

   1.4、请创建一个触发器,当在Worker表中某一个部门插入一名工人,Depts表中,该部门的人数自动加1

  2、存储过程的建立与使用

   2.1、利用存储过程,给Student表添加一条学生信息。

   2.2、利用存储过程StudentCourseSC表的连接中返回学生的学号、姓名、所选课程和成绩。

   2.3、利用存储过程查找‘李勇’的学号、所选课程、成绩。

   2.4、利用存储过程查找姓’李’并且性别为‘男‘的学生的学号、所选课程、成绩

七、 操作步骤

  1、创建触发器

    1.1、请自己创建两个表:WorkerDeptsWorker表中有三列,工号 char(15),姓名 char(20),部门号 char(10),

         资intDepts表中有三列,部门号 char(10),部门名 char(20),部门人数 int。在此表中插入几条数据。请创建一个触发

         器,当在此表中删除数据后,弹出“请注意你删除了数据”。

       I 、在创建查询框中输入以下两个SQL语句(建立WorkerDepts表),如下图所示:

         触发器、存储过程的建立与使用—实验报告  

               触发器、存储过程的建立与使用—实验报告

        II 、执行SQL语句,在数据库列表中刷新,即可查找到WorkerDepts表,如下图所示:

         触发器、存储过程的建立与使用—实验报告

        III 、分别在 WorkerDepts表中插入数据,如下图所示:

  (1)Worker

           触发器、存储过程的建立与使用—实验报告

  (2)、 Depts

           触发器、存储过程的建立与使用—实验报告

     IV 、创建一个触发器,当在此表中删除数据后,弹出“请注意你删除了数据”,SQL语句如下图所示:

      1)、创建Worker表中的触发器tri_worker

                   触发器、存储过程的建立与使用—实验报告

 2)、创建Depts表中的触发器tri_depts    

       

1.2、接着在创建一个触发器,当删除数据后,弹出“请注意你删除了某个人的数据”。

      I 、在创建查询框中输入SQL语句,如下图所示:

             触发器、存储过程的建立与使用—实验报告       

        II 、执行SQL语句,其结果如下图所示:

        触发器、存储过程的建立与使用—实验报告

   1.3、在Worker表上创建一个触发器,当插入数据时,工资不小于1200元。     

            触发器、存储过程的建立与使用—实验报告

   1.4、请创建一个触发器,当在Worker表中某一个部门插入一名工人,Depts表中,该部门的人数自动加1

     I 、在创建查询框中输入SQL语句,如下图所示:

        触发器、存储过程的建立与使用—实验报告

        II 、执行SQL语句,其结果如下图所示:

             触发器、存储过程的建立与使用—实验报告      

  2、 存储过程的建立与使用

    1 添加学生记录的存储过程Stuadd

      I 、在创建查询框中输入SQL语句,如下图所示:

        触发器、存储过程的建立与使用—实验报告

        II 、执行SQL语句,其结果如下图所示:

             触发器、存储过程的建立与使用—实验报告  

   例2 修改学生记录的存储过程STUDENTUpdate

     I 、在创建查询框中输入SQL语句,如下图所示:

       触发器、存储过程的建立与使用—实验报告

      II 、执行SQL语句,其结果如下图所示:

       触发器、存储过程的建立与使用—实验报告      

  例3 删除学生记录的存储过程STUDENTDelete

     I 、在创建查询框中输入SQL语句,如下图所示:

        触发器、存储过程的建立与使用—实验报告

     II 、执行SQL语句,其结果如下图所示:

         触发器、存储过程的建立与使用—实验报告

  例4 在学生表中查询学生学号和姓名,并按年龄排序

    I 、在创建查询框中输入SQL语句,如下图所示:

      触发器、存储过程的建立与使用—实验报告

      II 、执行SQL语句,其结果如下图所示:

         触发器、存储过程的建立与使用—实验报告

  例5 根据姓名查询学生所选课程的成绩

    I 、在创建查询框中输入SQL语句,如下图所示:

      触发器、存储过程的建立与使用—实验报告

     II 、执行SQL语句,其结果如下图所示:

         触发器、存储过程的建立与使用—实验报告

  2.1、利用存储过程,给Student表添加一条学生信息。

    I 、在创建查询框中输入SQL语句,如下所示:

      exec stuadd '201400834207','李丽','','19','数学';

     II 、执行SQL语句,查看Student表的结果如下图所示:    

      触发器、存储过程的建立与使用—实验报告

  2.2、利用存储过程StudentCourseSC表的连接中返回学生的学号、姓名、所选课程和成绩。

     I 、在创建存储过程中输入SQL语句,如下图所示:

       触发器、存储过程的建立与使用—实验报告

     II 、执行查询SQL语句,如下图所示:

       触发器、存储过程的建立与使用—实验报告

     III、执行后的结果如下图所示

       触发器、存储过程的建立与使用—实验报告

  2.3、利用存储过程查找‘李勇’的学号、所选课程、成绩。

    I 、执行查询SQL语句,如下图所示:

      触发器、存储过程的建立与使用—实验报告

   II 、执行后的结果如下图所示:

         触发器、存储过程的建立与使用—实验报告

  2.4、利用存储过程查找姓’李’并且性别为‘男‘的学生的学号、所选课程、成绩

   I 、分别执行以下两个SQL语句,如下图所示:

     触发器、存储过程的建立与使用—实验报告

         触发器、存储过程的建立与使用—实验报告    

   II 、执行后的结果如下图所示:  

     触发器、存储过程的建立与使用—实验报告

八、实验总结

   通过此次上机实验,使我更加熟悉了对SQL语句及其应用,虽然是第一次上机调试但并不感到陌生。在SQL语句调试的过程中虽错误总是千奇百怪,但根据老师教授的知识很快的得以纠正,完成了本次实验,通过本次实验,深刻的意识到自身的不足,也明白了理论与实践的差距,同时自己学过的知识也得以加深理解与巩固,感谢老师给予我们机会,使我们的知识更加牢固!

附录

Student表:

      触发器、存储过程的建立与使用—实验报告

SC:

      触发器、存储过程的建立与使用—实验报告

Course: 

       触发器、存储过程的建立与使用—实验报告

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
实验五 触发器实验报告 [实验目的] 1. 理解Oracle触发器的种类和用途 2. 掌握行级触发器的编写 [预备知识] 1. PL/SQL程序设计 [实验原理] 1. 建立触发器 CREATE [OR REPLACE] TRIGGER <触发器名> BEFORE"AFTER INSERT"DELETE"UPDATE OF <列名> ON <表名> [FOR EACH ROW] WHEN (<条件>) <PL/SQL 程序块> ON 子句中的名称识别与数据库触发器关联的数据库表 触发器事件指定了影响表的 SQL DML 语句 ( INSERT、 DELETE 或 UPDATE) AFTER 指定了触发器在处理完成后触发 BEFORE 指定了触发器在处理完成前触发 默认情况下,触发器每个表触发一次 FOR EACH ROW 选项指定触发器每行触发一次(即触发器为行级触发器) 要使触发器触发,WHEN 子句中布尔型表达式的值必须判定为 TRUE 可以将 REPLACE 添加到 CREATE 语句以自动删除和重建触发器 2. 行级触发器中引用表数据 在行级触发器中,使用伪记录来表示旧数据:old和新数据:new 引用示例::new.customer_name, :old.customer_name 3. 行级触发器中的谓词 在一个多条件触发的触发器中,使用谓词可以区分当前触发的操作的类型:inserting, updating,deleting。 示例: IF Inserting THEN 语句 ; END IF; IF Updating THEN 语句 ; END IF; IF Deleting THEN 语句 ; END IF; 4. 触发器的限制 SELECT 语句必须是 SELECT INTO 语句或内部游标声明。 行级触发器不可以对触发表进行查询,包括其调用的子过程中。 不允许 DDL 声明和事务控制语句 。 如果由触发器调用存储子过程,则存储子程序不能包括事务控制语句 。 :old 和 :new 值的类型不能是 LONG 和 LONG RAW。 [实验内容] 1. 给Customer表增加一列Savings,类型为int,来存放每个顾客的存款总额。 ALTER TABLE customer ADD (saving varchar2(30)); select * from customer; 2. 更新Customer表,使得Savings字段的值正确。 3. 在Account表上增加一个行级触发器,当对account的balance进行update和insert一个 记录时同步修改Customer的Savings字段,保证数据的一致性。 4. 对account进行update操作,记录account表和customer表的变化。 5. 去掉顾客- 存款账号表中引用account表的外键约束(如果不去掉,后面的操作无法实现。当然最 佳的方法是修改其外键约束的更新策略,但考虑到复杂性,这里使用不标准的做法, 但建议大家实际运用中不要这么做)。在顾客- 存款账号表插入一条记录,表明顾客开设了一个新的账户。 6. 将一条刚才新开账户号的存款记录插入账号表,记录account表和customer表的变化。 [实验总结] 1. 实验中遇到的问题和解决的方法。 ----------------------- "触发事件 ":old ":new " "Insert "无定义,所有字段都是N"该语句完成后插入的值 " " "ULL " " "Update "更新前该行的旧值 "更新后该行的值 " "Delete "删除前该行的值 "无定义,所有字段都是N" " " "ULL "
本实验的目的是掌握数据库存储过程触发器创建和应用,以及了解它们在实际应用中的作用。本实验使用的数据库为MySQL。 一、实验环境 1. MySQL数据库 2. Navicat数据管理工具 二、实验步骤 1. 数据库建立 本实验中使用的数据库为sdut,可以通过Navicat工具新建一个MySQL数据库。 2. 学生表的创建 学生表包含学号、姓名、性别、年龄、所在班级等字段,可以通过下面的SQL语句创建: ```sql CREATE TABLE student ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20), sex CHAR(2), age INT, class_id INT ); ``` 3. 学生表的数据插入 可以使用下面的SQL语句向学生表中插入一些数据: ```sql INSERT INTO student (name, sex, age, class_id) VALUES ('张三', '男', 18, 1), ('李四', '女', 19, 2), ('王五', '男', 20, 3), ('赵六', '女', 21, 1), ('钱七', '男', 22, 2); ``` 4. 存储过程创建 存储过程是一段预定义好的SQL语句集合,可以在需要时直接调用,可以减少数据库服务器的负担和网络传输的时间。本实验中创建一个存储过程,用于统计每个班级的学生总数。 ```sql CREATE PROCEDURE count_student() BEGIN SELECT class_id, COUNT(*) AS total FROM student GROUP BY class_id; END; ``` 上面的存储过程会查询学生表中的数据,并按照班级进行分组,然后统计每个班级的学生总数。 5. 触发器创建 触发器是一段SQL语句,可以在数据库的某个操作(如插入、更新、删除)发生时自动触发执行。本实验中创建一个触发器,用于在学生表中插入数据时自动更新班级表中的学生总数。 ```sql CREATE TRIGGER update_class AFTER INSERT ON student FOR EACH ROW BEGIN UPDATE class SET total = total + 1 WHERE id = NEW.class_id; END; ``` 上面的触发器会在学生表中插入数据时自动执行,将对应班级的学生总数加1。 6. 实验结果 可以通过以下两种方式验证存储过程触发器的正确性: (1)调用存储过程 可以使用下面的SQL语句调用存储过程: ```sql CALL count_student(); ``` 调用结果如下: ``` class_id | total ---------|------ 1 | 2 2 | 2 3 | 1 ``` 可以看到存储过程成功统计了每个班级的学生总数。 (2)插入数据 可以使用下面的SQL语句向学生表中插入一条数据: ```sql INSERT INTO student (name, sex, age, class_id) VALUES ('孙八', '女', 23, 3); ``` 插入数据后,可以查询班级表的数据,验证触发器是否成功更新了学生总数: ```sql SELECT * FROM class; ``` 查询结果如下: ``` id | name | total ---|------|------ 1 | 一班 | 2 2 | 二班 | 2 3 | 三班 | 2 ``` 可以看到触发器成功将三班的学生总数从1更新为2。 三、实验总结 本实验通过创建存储过程触发器,成功实现了统计班级学生总数和自动更新班级学生总数功能。存储过程触发器可以大大减少数据库服务器的负担和网络传输的时间,提高了数据库的性能和响应速度,是数据库管理中常用的技术手段。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值