计算机科学系实验报告
课程名称:MYSQL数据库技术 实验指导教师:钟志宏
姓 名 | 吴位吕 | 学 号 | 2010081245 | 班 级 | B10计信 | |
实验名称 | MYSQL存储过程与触发器 | |||||
实验日期 | 2012/10 | 实验地点 | 3506 | 实验成绩 | ||
实验目的 | 1.理解存储过程在数据库中的作用,能够针对MYSQL编写所需的存储过程。 2.理解触发器在数据库中的作用,能够针对MYSQL编写所需的触发器。 | |||||
实验内容: | 1.掌握MYSQL中存储过程编写的方法并完成指导书上要求的相关实验。 2.掌握MYSQL中触发器编写的方法并完成级联更新、删除、及CHECK功能。 | |||||
\实验环境 | 安装MYSQL数据库的PC | |||||
putty是什么意思英语实验要求:
(在导入的教学管理STM数据库中完成):
1、基本储存过程的创建
①创建一存储过程get_student_num,利用输出参数形式获取学生人数信息。并利用CALL调用该存储过程查看结果。
DELIMITER $$
CREATE PROCEDURE `stm`.`get_student_num`(OUT count_num CHAR(10))
BEGIN
mysql查看所有存储过程 SELECT COUNT(sno) INTO count_num FROM student;
END$$
DELIMITER ;
CALL get_student_num(@count_num)
SELECT @count_num
②创建一存储过程get_student_by_sno,通过输入学生编号作为参数,获得该学生的记录信息。并利用CALL调用该存储过程查看结果。
DELIMITER $$
CREATE PROCEDURE `stm`.`get_student_by_sno`(IN sno_in CHAR(10))
BEGIN
SELECT *FROM student WHERE sno = sno_in;
END$$
DELIMITER ;
CALL get_student_by_sno('900262')
③创建一存储过程update_sage_by_sno,通过输入学生编号、年龄作为参数,将指定学生的年龄更改为指定的年龄。并利用CALL调用该存储过程查看结果。
DELIMITER $$
CREATE PROCEDURE `stm`.`update_sage_by_sno`(IN sno_in CHAR(13) ,sage_in INT)
BEGIN
UPDATE student SET sage=sage_in WHERE sno=sno_in;
绿山墙的安妮的作者 END$$
DELIMITER ;
CALL update_sage_by_sno('900125',20)
④创建一存储过程delete_student_by_sno,通过输入学生编号作为参数,删除该学生记录。并利用CALL调用该存储过程查看结果。
DELIMITER $$
CREATE PROCEDURE `stm`.`delete_student_by_sno`(IN sno_in CHAR(10))
BEGIN
DELETE FROM student WHERE sno=sno_in;
END$$
DELIMITER ;
CALL delete_student_by_sno('900106')
⑤创建一存储过程insert_student,通过输入相关信息作为参数,向学生表中添加一学生记录。并利用CALL调用该存储过程查看结果。
DELIMITER $$
CREATE PROCEDURE `stm`.`insert_student`(IN snox CHAR(10),snamex VARCHAR(10),
ssexx VARCHAR(1),sagex SMALLINT(5),enterdatex DATETIME)
BEGIN
INSERT INTO student (sno,sname,ssex,sage,enterdate)
VALUES (snox,snamex,ssexx,sagex,enterdatex);
END$$
DELIMITER ;
CALL insert_student('900104','里斯','男',21,'2010-09-12')
2、基本函数过程的创建
①创建一存储函数get_student_num,利用输出参数形式获取学生人数信息。并利用select调用该存储函数查看结果。
DELIMITER $$
CREATE FUNCTION `stm`.`get_student_num`()
RETURNS INT
BEGIN
DECLARE num INT;
SELECT COUNT(*) INTO num FROM student;
RETURN num;
END$$
DELIMITER ;
SELECT get_student_num()
②创建一存储函数get_student_by_sno,通过输入学生编号作为参数,获得该学生的记录信息。并利用select调用该存储函数查看结果。
DELIMITER $$
CREATE FUNCTION `stm`.`get_student_by_sno`(snox CHAR(10))
RETURNS CHAR(100)
BEGIN
DECLARE snamex VARCHAR(10);
DECLARE ssexx VARCHAR(1);
DECLARE sagex SMALLINT;
常量元素中最少的是 DECLARE enterdatex DATETIME;
DECLARE record VARCHAR(100);
SELECT sname,ssex,sage,enterdate INTO snamex,ssexx,sagex,enterdatex FROM student WHERE sno=snox;
SET record=CONCAT_WS(',',snox,snamex,ssexx,sagex,enterdatex);
RETURN record;
END$$
DELIMITER ;
SELECT get_student_by_sno('900106')
3、利用SHOW CREATE {PROCEDURE | FUNCTION} sp_name查看存储过程或函数的定义。
SHOW CREATE PROCEDURE delete_student_by_sno\G
SHOW CREATE FUNCTION get_student_by_sno\G
4、定义条件和处理
①创建一存储过程insert_student_condition,利用条件定义,当主键重复时结束
存储过程,并提示“学生主键重复”。
DELIMITER $$
CREATE PROCEDURE insert_student_condition(snox CHAR(10),snamex VARCHAR(20),ssexx VARCHAR(2),sagex SMALLINT,enterdatex DATETIME)
BEGIN
DECLARE EXIT HANDLER FOR SQLSTATE '23000'LECT '学生主键重复';
INSERT INTO student(sno,sname,ssex,sage,enterdate)
VALUES(snox,snamex,ssexx,sagex,enterdatex);
END$$
DELIMITER ;
CALL insert_student_condition('900106','毕琴','女',20,'2010-09-15');
②创建一存储过程insert_student_condition_user,利用条件定义,当插入学生
c语言isalpha怎么用的性别不为“男”或“女”时结束存储过程,并提示“学生性别不正确”。
DELIMITER $$
CREATE PROCEDURE insert_student_condition_user(IN snox CHAR(10),snamex VARCHAR(20),ssexx CHAR(2),sagex SMALLINT,enterDatex DATETIME)
BEGIN
DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02'SELECT '学生性别不正确';
IF ssexx='男'OR ssexx='女' THEN
INSERT INTO student(sno,sname,ssex,sage,enterDate)
VALUES (snox,snamex,ssexx,sagex,enterDatex) ;
ELSE
INSERT INTO xx VALUES('xxxxx');
END IF;
END$$
DELIMITER;
CALL insert_student_condition_user('900134','向阳','中',20,'2010-09-12');
CALL insert_student_condition_user('900134','向阳','女',20,'2010-09-12');
5、光标的使用
①创建一存储过程update_student_borthyear,在学生表中添加字段”borthyear”
(出生年份),在存储过错中利用光标,通过学生年龄计算出出生年份并修改表中对应
字段。
DELIMITER $$
CREATE PROCEDURE update_student_borthyear(IN snox CHAR(10))
BEGIN
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论