最近一直在补数据库知识,非计科出身的我知识漏洞的确有点小大。
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;