一、实验目的
本实验的目的是使学生熟练掌握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/)