计算机科学系实验报告
课程名称:MYSQL数据库技术                      实验指导教师:钟志宏
openstack搭建教程vmware环境
姓    名
吴位吕
学    号
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小时内删除。