mysql学习-触发器,存储过程(函数…

此篇博客已经重新整理,新版本在:
http://blog.csdn.net/alps1992/article/details/49254387


我最开始使用触发器和存储过程是在学oracle的时候,做一个客户管理系统。。
然后当时用的现在忘得差不多了,而且oracle和mysql在这方面也有点差别。。不得不说其实oracle还真的是比较好用的,mysql相比起来简单很多哈~

我在这说下mysql的,oracle的我也记不起来了。。
触发器:create trigger
create trigger trigger_name trigger_time trigger_event
on table_name for each row trigger_stmt
这个就是创建规则了,不过有一些属性和注意的地方~
table_name 必须是永久性表,不能在temporary表和视图上使用。
trigger_time是触发时间,before和after两个属性,一个是在激活语句之前触发,一个是在激活语句执行后触发。
trigger_event大致有:insert/update/delete这三个。
trigger_stmt就是执行语句。(多个语句用begin...end来包含)

CREATE   TABLE   `company`  (
  `id`   int ( 11 NOT   NULL   AUTO_INCREMENT ,
  `company`   varchar ( 20 NOT   NULL ,
  `phonenumber`   varchar ( 12 NOT   NULL ,
  `email`   varchar ( 40 NOT   NULL ,
  PRIMARY   KEY  ( `id` )
ENGINE = InnoDB   DEFAULT   CHARSET = latin1

CREATE   TABLE   `contacts`  (
   `id`   int ( 11 NOT   NULL ,
   `username`   varchar ( 20 NOT   NULL ,
   `phonenumber`   varchar ( 12 NOT   NULL ,
   `email`   varchar ( 40 NOT   NULL ,
   `officephone`   varchar ( 12 NOT   NULL ,
   `position`   varchar ( 20 NOT   NULL
ENGINE = InnoDB   DEFAULT   CHARSET = latin1

这个是表格哈~
然后创建触发器:
delimiter   //
create   trigger   insertcustomer   after   delete   on   company
for   each   row
begin  
delete   from   contacts ;
  end
  //
8 delimiter ;
这里我在begin中只用了一条语句,多条语句直接加载begin和end中间就好了~
在触发器之前和之后我还有两个语句
delimiter //
这句的意思是让mysql把结束符号变成 '//' 默认是 ';' 然后最后结束用 '//'来结束,再改回来delimiter ;
触发器大致就这个样子~这个当你在删除company记录的时候也删除contacts里的记录

这有个其他例子:
DELIMITER |
 
CREATE TRIGGER testref BEFORE INSERT ON test1
  FOR EACH ROW BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
    DELETE FROM test3 WHERE a3 = NEW.a1;  
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
  END
| (from:http://dev.mysql.com/doc/refman/5.1/zh/triggers.html)
大致就这些~
查看触发器: showtriggers \g
删除触发器:  DROP TRIGGER[ schema_name .] trigger_name这里可以 drop trigger insertcutomer;

存储过程:
CREATE PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body
 
CREATE FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body
这两个创建过程参考的上面网址的。
直接看例子应该比较容易懂一点~

mysql >   create   procedure   deletecompany ( in   cid   int )
    ->   begin
    ->   delete   from   company   where   id   =   cid ;
    ->   delete   from   contacts   where   id   =   cid ;
    ->   end ;
    ->   //
这个例子肯定很简单了。。(记得分隔符~)
在procedure里参数分为IN(输入,调用时候要指定), OUT(返回值),INOUT我这里用cid作为IN输入类型。
调用
call deletecompany('2');
然后就发现已经执行了~
函数我其实用的很少,等我下次用的时候再写吧~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值