玖叶教程网

前端编程开发入门

数据库杂记 | MySQL 触发器

触发器在满足定义条件时触发,并执行触发器中定义的语句集合,这使得我们可以利用触发器做一些有用的事情,比如在新增、更新记录时记录操作的时间,在删除记录时把记录进行备份或写日志。

来个简单示例,先创建一个表:

mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));

再创建触发器:

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
    -> FOR EACH ROW SET @sum = @sum + NEW.amount;

该触发器定义了在向 account 表插入数据时会汇总 amount 字段的值到 @sum 用户变量中,这样我们就可以在每次执行插入后读取该用户变量,例如:

mysql> SET @sum = 0;
mysql> INSERT INTO account VALUES(10, 10.23),(12, 137.50),(13, -100.00);
mysql> SELECT @sum AS 'Total Amount Inserted';

输出:

+-------------------------+
| Total Amount Inserted  |
+-------------------------+
| 47.73                             |
+-------------------------+

简单的触发器演示完了,删除这个触发器:

mysql> DROP TRIGGER test.ins_sum;

触发器可以附加到下面三个事件:

  • INSERT
  • UPDATE
  • DELETE

INSERT 事件触发器示例:

DELIMITER $
CREATE TRIGGER insert_date
  BEFORE INSERT ON stack
  FOR EACH ROW
BEGIN
  -- 在插入执行之前对 insert_date 字段赋值
  SET NEW.insert_date = NOW();
END;

$
DELIMITER ;

UPDATE 事件触发器示例:

DELIMITER $
CREATE TRIGGER update_date
  BEFORE UPDATE ON stack
  FOR EACH ROW
BEGIN
  -- 在更新执行之前对 update_date 字段赋值
  SET NEW.update_date = NOW();
END;

$
DELIMITER ;

DELETE 事件触发器示例:

DELIMITER $
CREATE TRIGGER deletion_date
  AFTER DELETE ON stack
  FOR EACH ROW
BEGIN
  -- 在删除成功之后向 log_action 表插入一条删除日志
  INSERT INTO log_action(stack_id, deleted_date) VALUES(OLD.id, NOW());
END;

$
DELIMITER ;

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言