我一直听说有关触发器,我有几个问题。
什么是触发器?
我该如何设置它们?
除了典型的SQL内容之外,还有什么需要注意的地方吗?设置MySQL触发器
10
A
回答
15
触发器允许您在某些事件发生时执行数据库中的函数(例如,插入到表中)。
我无法对mysql进行具体评论。
注意事项:触发器可以非常诱人,当你第一次使用它们时,它们看起来像是各种问题的灵丹妙药。但是,他们会发生“魔术”的事情,如果你不知道数据库里面的事情,看起来真的很奇怪(例如插入其他表格,输入数据改变等)。在实现事件作为触发器之前,我会认真考虑在模式周围强制使用API(最好在数据库中,但在外部如果不行)。
有些事情我还是使用触发器的
- “DATE_CREATED”和“date_last_edited”领域
- 保持跟踪插入“ID”的(在Oracle中,那里没有汽车id字段)
- 饲养改变历史
事情你不想使用触发器,
-
条
- 业务规则/逻辑
- 任何它连接的数据库之外(例如Web服务调用)
- 访问控制
- 任何这不是事务性的(什么,你在做触发必须能够与回滚交易)
0
触发器是一个指定的数据库对象,它与一个表关联,并在表发生特定事件时被激活。
创建触发器:
CREATE TRIGGER triggerName [BEFORE|AFTER] [INSERT|UPDATE|DELETE|REPLACE] ON tableName FOR EACH ROW SET stuffToDoHERE;
即使我回答了这个部分的另一个问题仍然有效。
1
从dev.mysql.com,触发器是
...指定的数据库对象,它是一个与表有关 那就是 激活当特定事件 为表发生。
创建它们的语法is also documented at that site。
简而言之,
CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
,他们提供了一个例子:
CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount;
你至少需要通过all the restrictions on stored functions遵守。 您将无法锁定表格,更改视图或修改触发触发器的表格。也触发may cause replication problems。
0
这个问题是旧的,其他的答案都非常好,但由于用户被问及应采取预防措施,我想补充一点:
- 如果在复杂环境中使用复制,请不要大量使用触发器,也不要从触发器中调用存储过程。
- 触发器在MySQL中很慢。
- 您不能在触发器中使用某些SQL语句。有些陈述是允许的,但应该避免,如LOCK。一般规则是:如果你不完全理解你在做什么的含义,你不应该这样做。
- 触发器会导致无限循环,所以要小心。
相关问题
- 1. 如何设置mysql多触发器
- 2. MySQL的:如何设置触发器
- 3. MySQL触发器+设置变量
- 4. MYSQL - 触发器
- 5. 设置触发
- 6. mysql触发器到oracle触发器
- 7. MySQL + delete触发器
- 8. MySQL DML触发器
- 9. 更新前的MySQL触发器 - 从字符串中设置dateformat
- 10. MYSQL触发器获取最后一行值并设置
- 11. MYSQL触发器设置日期时间值使用case语句
- 12. 如何设置MySQL触发器来更新其他表格列?
- 13. 如何在mysql中设置动态值的触发器?
- 14. MySql触发器没有触发(完全)
- 15. MySQL触发器没有触发AFTER INSERT
- 16. 带触发条件的MySQL触发器
- 17. MySQL触发器没有被触发?
- 18. 使用SQL触发器设置datetime列
- 19. 在事件触发器中设置VerticalAlignment
- 20. 用触发器设置BorderBrush的颜色
- 21. 设置规则/触发器在集会
- 22. 使用触发器设置可见性
- 23. 设置定时触发器的时区
- 24. WPF DataGrid:在触发器中设置ColumnWidth
- 25. WPF - 为触发器的setter设置DataContext
- 26. 在触发器上设置Wpf AlternatingRowBackground
- 27. Silverlight - 如何设置触发器弹出
- 28. UpdatePanel触发器,如何设置__doPostBack的触发事件?
- 29. Mysql触发器:检查值实际上是在插入触发器之前设置的
- 30. mysql约束或触发器