您的位置:首页 > 数据库

数据库学习之触发器

2013-04-11 22:31 169 查看
最近一直在补数据库知识,非计科出身的我知识漏洞的确有点小大。

1、触发器简单知识回顾:

触发器是一种特殊的存储过程,特殊在其执行不是由程序调用,也不是手工启动,而是被某个设定好的事件触发。

2、如何定义触发器呢?

CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt;

trigger_name 是你个触发器起的名字

trigger_time 是触发程序的动作时间,可以为BEFORE 或 AFTER, 用来指明触发程序是在激活它的语句之前或之后触发。

trigger_event 指明了激活触发程序的语句类型,可以为 INSERT,UPDATE , DELETE。

示例:

CREATE TABLE ins ( t_id	INT,  t_name    VARCHAR(20)); # 创建表ins
CREATE TRIGGER ins_tr   BEFORE INSERT ON ins FOR EACH ROW SET NEW.t_name = "helloworld";    #无论向表中添加什么数据字段,t_name="helloworld"
INSERT INTO ins (t_id) VALUES (1);
SELECT * FROM ins;
+------+------------+
| t_id | t_name     |
+------+------------+
|    1 | helloworld |
+------+------------+
1 row in set (0.00 sec)


上面的例子实现了一个极其简单的触发器,无论向表中添加什么数据字段,触发器都会将相应的t_name 设置为helloworld。 触发器ins_tr 会因为事件INSERT而触发,完成对t_name 的更新。

3、常见问题:

ERROR 1235 (42000): This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'

这个错误表明该表已经有触发器了,如果你又不记得自己曾经创建过什么关于这张表的触发器,可以:

SHOW TRIGGERS;

在TRIGGER对应的一列中,可以找到已经创建的TRIGGER。然后

DROP TRIGGER tri_name;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: