mysql存储器和触发器的例子
1、创建一个带输入参数的存储过程执行向表中插入数据。
DELIMITER $$
CREATE PROCEDURE insert_pro
(IN kch CHAR(3),IN kcm CHAR(16),
IN xq TINYINT,IN xs TINYINT,IN xf TINYINT)
BEGIN
INSERT INTO kc
VALUES(kch,kcm,xq,xs,xf);
END$$
DELIMITER ;
-- 调用存储过程
CALL insert_pro('001','c',1,56,2);
2、创建一个带输入参数的存储过程根据条件删除表中数据。
DELIMITER $$
CREATE PROCEDURE delete_pro
(IN kch CHAR(3))
BEGIN
DELETE FROM kc WHERE 课程号=kch;
END$$
DELIMITER ;
CALL delete_pro('001');
3、创建一个带输入参数的存储过程根据条件修改表中数据。
DELIMITER $$
CREATE PROCEDURE update_pro
(IN kch CHAR(3),in xs tinyint)
BEGIN
UPDATE kc SET 学时=xs WHERE 课程号=kch;
END$$
DELIMITER ;
CALL update_pro('001',88);
4、创建一个带输入参数的存储过程根据条件查询表中数据。
DELIMITER $$
CREATE PROCEDURE select_pro
(IN kch CHAR(3))
BEGIN
Select * FROM kc WHERE 课程号=kch;
END$$
DELIMITER ;
CALL select_pro('101');
5
创建触发器,实现当向xs_kc表中插入数据时同时修改成绩表和学生表中的数据。
指定学分分析:
DELIMITER $$
CREATE TRIGGER XS_KC_ZXF BEFORE INSERT
ON XS_KC FOR EACH ROW
BEGIN
DECLARE xf INT;
SELECT 学分 INTO XF FROM KC WHERE 课程号=NEW.课程号;
IF NEW.成绩<60 THEN
SET NEW.学分=0;
ELSE
SET NEW.学分=XF;
UPDATE xs SET 总学分=总学分+xf WHERE 学号=NEW.学号;
END IF;
END$$
DELIMITER ;
6 创建触发器,实现当修改xs_kc表中的数据时同时修改成绩表和学生表中的数据。
DELIMITER $$
CREATE TRIGGER XS_KC_ZXF BEFORE UPDATE ON XS_KC FOR EACH ROW
BEGIN
DECLARE XF INT;
SELECT 学分 INTO XF FROM KC WHERE 课程号=NEW.课程号;
IF new.成绩<60 THEN
SET new.学分=0;
ELSE
SET new.学分=xf;
END IF ;
IF NEW.成绩<60 AND old.成绩>=60 THEN
UPDATE xs SET 总学分=总学分 - xf WHERE 学号=new.学号;
ELSEIF NEW.成绩>=60 AND old.成绩<60 THEN
UPDATE xs SET 总学分=总学分 + xf WHERE 学号=new.学号;
END IF;
END$$
DELIMITER ;