存储过程和触发器

触发器(trigger)是一个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。

    例如,当学生表中增加了一个学生的信息时,学生的总数就应该同时改变。因此可以针对学生表创建一个触发器,每次增加一个学生记录时,就执行一次学生总数的计算操作,从而保证学生总数与记录数的一致性。
    触发器(trigger)是个特殊的存储过程,不同的是执行存储过程要使用CALL语句来调用,而触发器的执行不需要使用CALL语句来调用,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MySQL自动调用。
    触发程序的优点如下:
    (1)触发程序的执行是自动的。当对触发程序相关表的数据做出相应的修改后立即执行。
    (2)触发程序可以通过数据库中相关的表进行层叠修改另外的表。
    (3)触发程序可以实施比FOREIGN KEY约束、CHECK约束更为复杂的检查和操作。

    2、创建触发器
    语法:
       CREATE TRIGGER 触发器名称 BEFORE|AFTER 触发事件
       ON 表名 FOR EACH ROW
       BEGIN
              触发器程序体;
       END

 <触发器名称>      最多64个字符,它和MySQL中其他对象的命名方式一样
 { BEFORE | AFTER }           触发器时机
 { INSERT | UPDATE | DELETE } 触发的事件
     ON <表名称>      标识建立触发器的表名,即在哪张表上建立触发器
  FOR EACH ROW 触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次
 <触发器程序体>  要触发的SQL语句:可用顺序,判断,循环等语句实现一般程序需要的逻辑功能

例题:

字段名   数据类型 主键 外键 非空 唯一 自增

id  INT  是   否    是    是  否

name VARCHAR(50)  否   否    是    否  否

glass   VARCHAR(50)  否   否    是    否  否

sch 表内容

id name glass

1 xiaommg glass 1

2  xiaojun glass 2

1、创建一个可以统计表格内记录条数的存储函数 ,函数名为count_sch() 

2、创建一个存储过程avg_sai,有3个参数,分别是deptno,job,接收平均工资, 功能查询emp表dept为30,job为销售员的平均工资。

创建表

插入数据

INSERT INTO `emp1` VALUES (1001, '甘宁', '文员', 1013, '2000-12-17', 8000, NULL, 20);
INSERT INTO `emp1` VALUES (1002, '黛绮丝', '销售员', 1006, '2001-02-20', 16000, 3000, 30);
INSERT INTO `emp1` VALUES (1003, '殷天正', '销售员', 1006, '2001-02-22', 12500, 5000, 30);
INSERT INTO `emp1` VALUES (1004, '刘备', '经理', 1009, '2001-04-02', 29750, NULL, 20);
INSERT INTO `emp1` VALUES (1005, '谢逊', '销售员', 1006, '2001-09-28', 12500, 14000, 30);
INSERT INTO `emp1` VALUES (1006, '关羽', '经理', 1009, '2001-05-01', 28500, NULL, 30);
INSERT INTO `emp1` VALUES (1007, '张飞', '经理', 1009, '2001-09-01', 24500, NULL, 10);
INSERT INTO `emp1` VALUES (1008, '诸葛亮', '分析师', 1004, '2007-04-19', 30000, NULL, 20);
INSERT INTO `emp1` VALUES (1009, '曾阿牛', '董事长', NULL, '2001-11-17', 50000, NULL, 10);
INSERT INTO `emp1` VALUES (1010, '韦一笑', '销售员', 1006, '2001-09-08', 15000, 0, 30);
INSERT INTO `emp1` VALUES (1011, '周泰', '文员', 1006, '2007-05-23', 11000, NULL, 20);
INSERT INTO `emp1` VALUES (1012, '程普', '文员', 1006, '2001-12-03', 9500, NULL, 30);
INSERT INTO `emp1` VALUES (1013, '庞统', '分析师', 1004, '2001-12-03', 30000, NULL, 20);
INSERT INTO `emp1` VALUES (1014, '黄盖', '文员', 1007, '2002-01-23', 13000, NULL, 10);
INSERT INTO `emp1` VALUES (1015, '张三', '保洁员', 1001, '2013-05-01', 80000, 50000, 50);

 创建avg_sai

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值