sdut数据库存储过程和触发器的创建和应用实验报告
时间: 2023-07-25 08:09:58 浏览: 187
本实验的目的是掌握数据库存储过程和触发器的创建和应用,以及了解它们在实际应用中的作用。本实验使用的数据库为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。
三、实验总结
本实验通过创建存储过程和触发器,成功实现了统计班级学生总数和自动更新班级学生总数功能。存储过程和触发器可以大大减少数据库服务器的负担和网络传输的时间,提高了数据库的性能和响应速度,是数据库管理中常用的技术手段。
阅读全文