所谓的MySQL触发器实际上与一些编程语言中的事件/事件处理程序类似
触发器的建立
- 建立一张示例表。
CREATE TABLE account(acct_num INT,account DECIMAL(10,2));
- 建立触发器示例:
CREATE TIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum=@sum+NEW.account;
以上的触发器示例,创建了一个名为ins_sum
的触发器,BEFORE
指明了触发的动作时间,与之对应的是AFTER
;INSERT
指明了激活触发器的动作,此位置还可以用UPDATE
/DELETE
;跟在FOR EACH ROW
后面的语句定义了激活触发器后将要执行的程序。在上面的例子中,触发而执行的语句是SET
语句,负责将插入的account的值加起来,其中NEW.account
意思是将要插入到新行的account的值。
使用上例之前,应首先将@account
初始化,然后再执行INSERT
语句 - 注意:不能为同一个表同一个触发时间定义两个触发器,这也是没有意义的
- 注意:触发器不能调用动态SQL,也不能使用关于开始或结束事务的语句
- 可以使用
OLD
和NEW
来更新或引用动作执行之前和之后的对象
触发器的删除
DROP TRIGGER [scheme_name.]trigger_name
触发器的使用
- 当执行触发器所定义的动作时,触发器定义的程序将自动执行
批量执行SQL语句
- 将想要执行的SQL语句写入一个文本文件,例如
test_file
。然后执行mysql db_name < test_file --user=root
- 如果文本文件中已经写明
USE [db_name]
,应执行mysql < test_file --user=root
以上两个例子,MySQL用户名为root,文本文件为test_file - 如果正在执行MySQL,可以使用
source
或者.
。e.g.:source test_file.sql
或者. test_file.sql