MySQL上级第五章-数据库编程

一、上机目的

1、掌握函数及自定义函数;

2、掌握存储过程;

3、掌握触发器;

4、掌握事件;

5、掌握预处理语句。


二、上机内容

(1)创建一个名为MyFun的不带参数的自定义函数,该函数的功能是从数据表C中查询C3的课程名,并调用函数。

DELIMITER $$
CREATE FUNCTION MyFun() RETURNS VARCHAR(20)
BEGIN
    RETURN(SELECT CN FROM C WHERE CNo='C3');
END
$$
DELIMITER ;

SELECT MyFun();

(2)创建一个名为InsertFun的带参数的自定义函数,该函数的功能是向数据表C中插入课程的信息,并调用函数。

DELIMITER $$
CREATE FUNCTION insertFun(CnName VARCHAR(20),CNo VARCHAR(10),CT INT))
RETURNS VARCHAR(20)
BEGIN
    INSERT C(CN,CNo,CT) VALUES(CnName,CNo,CT);
    RETURN ('OK')
END
$$
DELIMITER ;
SELECT insertFun('ROSE','C8',64);

(3)创建一个名为MyProc的不带参数的存储过程,该存储过程的功能是从数据表S中查询所有男同学的信息,并执行存储过程。

DELIMITER $$
CREATE PROCEDURE MyProce()
BEGIN
    SELECT * FROM S WHERE Sex='男';
END
$$
DELIMITER ;
CALL MyProce();

(4)创建一个名为InsertRecord的带参数的存储过程,该存储过程的功能是从数据表S中根据学号查询某一同学的信息,学号的值由参数提供,并执行存储过程。

DELIMITER $$
CREATE PROCEDURE insertRecord(IN Ssno VARCHAR(20))
BEGIN
    SELECT SN,Dept FROM S WHERE Sno IN(Ssno);
END
$$
DELIMITER ;
CALL insertRecord('S1');

(5)创建一个触发器,该触发器的作用为:当在学生表S中根据学号删除某一个学生时,在学生选课表SC中的选课记录也全部被删除。

DELIMITER $$
CREATE TRIGGER delete_stu BEFORE DELETE
ON S FOR EACH ROW
BEGIN
 DELETE FROM SC WHERE Sno=OLD.Sno;
END
$$
DELIMITER ;
DELETE FROM S WHERE Sno='S1';

(6)创建一个触发器,该触发器保证在学生选课表SC中添加新的记录时,新学生的学号Sno必须已经存在于学生表S中,如果不存在就提示错误提示“学生表S中没有该学生的基本信息,拒绝插入!”。

DELIMITER $$
CREATE TRIGGER insert_sc_data BEFORE insert
ON SC FOR EACH ROW
BEGIN
 IF NOT EXISTS (SELECT * FROM S WHERE  Sno=NEW.Sno)then
 SELECT '学生表中没有该学生的基本信息,拒绝插入'into @msg;
 else
    select '插入成功'into @msg;
end if;
end 
$$
SELECT @msg;

INSERT INTO SC VALUES('S7','C5','55');
SELECT @msg;

INSERT INTO SC VALUES('S5','C3','99');
SELECT @msg;
SELECT * FROM SC;

(7)创建一个一次性事件,在2分钟后向教师表T中添加一条学生记录,执行后事件不会被删除;

CREATE EVENT INSERT_DATA_EVENT
ON SCHEDULE
AT current_timestamp + interval 2 minute
on completion preserve
do insert into t values('T6','蔡琳','女',26,'讲师',1300,1500,'外语');

select * from t;

SHOW CREATE EVENT insert_data_event/G

(8)创建一个循环的事件,从现在开始,每分钟从数据表T查询的教师信息存储到一个新表TempTeach中,并在其创建时间的1个小时后过期。

create table TempTeach select * from t limit 0,0;
select * from TempTeach;
create event if not exists delete_event
on schedule every 1 minute
ends current_timestamp + interval 1 hour
on completion preserve
do insert into TempTeach select * from t limit 1,1;

 

上一篇:matlab字符串分割


下一篇:MySQL收尾