《数据库系统原理》实验12:函数与事件

一、实验目的

本实验的目的是使学生熟练掌握MySQL函数和事件的使用方法,加深SQL语言查询语句的理解。熟练掌握通过函数和事件使MySQl周期性完成特定事件的方法。

二、实验内容

1.新建数据库quickcast,在该数据库中新建1个表user_reg。并在表中添加一定量的测试数据,其中user_type分为“seeker”,“hunter”,“worker”三种。

输入以下代码并运行:

CREATE TABLE `user_reg` (  
    `user_id`  int(11) NOT NULL AUTO_INCREMENT ,  
    `cn_tname`  varchar(255) NOT NULL ,  
    `email`  varchar(255) NOT NULL ,  
    `eng_name`  varchar(255) NULL ,  
    `password`  varchar(255) NOT NULL ,  
    `user_name`  varchar(255) NOT NULL ,  
    `user_type`  varchar(255) NULL ,  
    `work_place`  varchar(255) NULL   
);  

结果如下图所示:

2.新建统计user_reg中user_type字段的表count_user.该表包含自增主键id,user总数user_num,seeker数seeker_num, hunter 数hunter_num和worker数worker_num.

    输入以下代码并运行:

CREATE TABLE `count_user` (  
    `id`  int NULL AUTO_INCREMENT ,  
    `user_num`  int NULL ,  
    `seeker_num`  int NULL ,  
    `hunter_num`  int NULL ,  
    `worker_num`  int NULL   
);  

结果如下图所示:

3.新建函数。在数据库quickcast中,点击“函数-新建函数”,类型为“过程”,点击完成。如图2.1所示,我们将在“BEGIN”和“END”之间添加自己的函数体。

4.编写统计user_reg 表中user_type的函数

①声明变量

②声明对于表user_reg中user_type字段的游标cu。游标用于遍历数据库表中的数据。

③声明异常处理

④初始化count_user表。(在该表没有统计数据时,插入一条初始数据)

⑤开启游标,使其开始遍历user_type,并将获得的值付给usertype(FETCH语句)。

 ⑥while循环,遍历到表中最后一条数据。在循环体中将遍历得到的数据进行处理,赋值给相应的变量。

⑦更新count_user表

⑧保存函数为count_user

⑨在数据库quickcast中选中函数count_user,点击“运行函数”,count_user表中的数据也随之更新

4.新建事件,事件可用于周期性的调用函数。

①在数据库quickcast中新建事件count_user,如图所示:(注意设置其状态)

②制定事件的计划。可设定其执行间隔,起始和结束时间,持续时间等。如图所示。

③保存事件为count_user,检查其状态是否为enable。然后修改user_reg表中的数据,统计表count_user按照预期定时更新

三、出现的问题及解决方案

问题:

ORDER BY关键字降序排序问题

SQL AND & OR 运算符与优先级问题

WHERE语句的特殊条件——例如is null、between and、like模糊查询等问题

Enum枚举类型的设定值问题

CHECK语句约束不起作用问题

解决方案:

参考《数据库系统概论课本》、菜鸟教程(https://www.runoob.com/sql)、CSDN博客和MySQL参考手册(https://dev.mysql.com/doc/)

发布了79 篇原创文章 · 获赞 100 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/lee1hong/article/details/105763525