ITPub博客

首页 > 数据库 > Oracle > mysql学习-触发器,存储过程(函数),函数

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

Oracle 作者:kaishixuexi 时间:2014-01-03 17:15:16 0 删除 编辑
我最开始使用触发器和存储过程是在学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(11NOT NULL AUTO_INCREMENT,
 `company` varchar(20NOT NULL,
 `phonenumber` varchar(12NOT NULL,
 `email` varchar(40NOT NULL,
 PRIMARY KEY (`id`)
ENGINE=InnoDB DEFAULT CHARSET=latin1

CREATE TABLE `contacts` (
  `id` int(11NOT NULL,
  `username` varchar(20NOT NULL,
  `phonenumber` varchar(12NOT NULL,
  `email` varchar(40NOT NULL,
  `officephone` varchar(12NOT NULL,
  `position` varchar(20NOT 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)
大致就这些~
查看触发器:show triggers 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
(from:http://dev.mysql.com/doc/refman/5.1/zh/stored-procedures.html)
这两个创建过程参考的上面网址的。
直接看例子应该比较容易懂一点~

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');
然后就发现已经执行了~
函数我其实用的很少,等我下次用的时候再写吧~
<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22922412/viewspace-1116107/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-11-24