ELSE SET BJ=1; END IF; END $$ Delimiter ;
调用该存储过程:CALL COMPA('2008002','2008003',@BJ);
查看结果:SELECT @BJ
2、触发器:
(1)创建触发器,在 student表中删除学生信息的同时将 sc表中该学生的 选课信息删除,以确保数据的完整性:
CREATE TRIGGER deleteSm before DELETE ON student FOR EACH ROW DELETE FROM sc WHERE Sno=OLD.Sno;
删除student 表中的一行数据,然后查看 sc表的变化: DELETE FROM student WHERE Sno='2008007'
观察sc表的变化;
(2)假设student1 表和student表的结构和内容都相同,在 student 上创 建一个触发器,如果添加一个学生的信息,该信息也会被添加到 student1 表中: delimiter $$
CREATE TRIGGER student_Ins
AFTER INSERT ON student FOR EACH ROW BEGIN
INSERT INTO student1
VALUES(new.Sno,new.Sname,new.Ssex,new.Sage,new.Sdept); END $$ Delimiter ;
向student 表中添加一条新信息('2008006','杨过','男',19,'IS') : INSERT INTO student
VALUES('2008006','杨过','男',19,'IS'); 观察student1表的变化;
(3)定义一个BEFORE行级触发器,为teacher 表定义完整性规则“插入教 授的信息时,工资不得低于 4000元,如果低于 4000元,则自动改为4000 元”: Create table teacher
( Tno varchar(20) primary key, Tname varchar(20), Tsex varchar(2), Job varchar(10), Income varchar(10) );
CREATE TRIGGER teacher_Income BEFORE INSERT ON teacher FOR EACH ROW BEGIN
IF(new.Job='教授')AND(new.salary<4000) THEN Set new.salary=4000; END IF; END;
向teacher表中添加两条新信息('10006','林涛','男','教授',3500)和 ('10007','冯巩','男','讲师',3500),以对比效果:
INSERT INTO teacher
VALUES('10006','林涛','男','教授',3500);
INSERT INTO teacher
VALUES('10007','冯巩','男','讲师',3500); SELECT * FROM teacher;
观察teacher表的结果;
(4)删除teacher 表上的触发器teacher_Income 。 DROP TRIGGER teacher_Income;
五、调试过程 1、
提示在第四行出现语法错误,将DECLARE SR1,SR2,FLOAT(10); 改为DECLARE SR1,SR2 FLOAT(10); 2、
相关推荐: