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 ;

 

posted @ 2012-03-19 20:28  仰望薰衣草  阅读(1319)  评论(0编辑  收藏  举报