SQLite 创建触发器 CREATE TRIGGER

如果要创建一个触发器,可以使用 CREATE TRIGGER 关键字

语法如下

CREATE  TRIGGER trigger_name [BEFORE|AFTER] event_name 
ON table_name [FOR EACH ROW]
BEGIN
-- Trigger logic goes here....
END;
  1. event_name 是指在表 table_name 上执行的操作,可以是 INSERTDELETEUPDATE

  2. [BEFORE|AFTER] 是指在执行操作之前触发还是执行操作之后触发

  3. -- Trigger logic goes here.... 只能是一些 SQL 语句

例如下面的 SQL 语句是在表 tbl_employee 上插入一条或者多条数据时触发一些操作

CREATE  TRIGGER trigger_name [BEFORE|AFTER] UPDATE  
ON tbl_employee
BEGIN
 -- Trigger logic goes here....
END;

范例

先运行下面的 SQL 语句创建测试数据

有两张表,一张是职工表,一张是日志表,每当职工表数据有新增时插入日志,用于审计

DROP TABLE tbl_employee;
DROP TABLE tbl_employee_log;

CREATE TABLE tbl_employee (
   id INTEGER PRIMARY KEY AUTOINCREMENT  NOT NULL,
   name           CHAR(64) NOT NULL,
   age            INTEGER  NOT NULL,
   city           CHAR(64),
   salary         REAL
);


CREATE TABLE tbl_employee_log(
    id INTEGER PRIMARY KEY AUTOINCREMENT  NOT NULL,
    emp_id INT NOT NULL,
    created_at CHAR(19) NOT NULL
);

我们先在表 tbl_employee 上创建一个插入触发器

CREATE TRIGGER trigger_employee_insert AFTER INSERT 
ON tbl_employee
BEGIN
   INSERT INTO tbl_employee_log(emp_id, created_at) VALUES (new.id, strftime('%Y-%m-%d %H:%M:%S','now'));
END;

现在,如果我么往表 tbl_employee 中插入数据,它将在表 tbl_employee_log 创建一条日志

INSERT INTO tbl_employee (name,age,city,salary) VALUES 
('张三', 25, 'pek', 102400.00 );

这将在 tbl_employee 表中创建如下一个记录

sqlite> SELECT * FROM tbl_employee;
id          name        age         city        salary    
----------  ----------  ----------  ----------  ----------
1           张三          25          pek         102400.0  

同时,会在 tbl_employee_log 表中创建一个记录

sqlite> SELECT * FROM tbl_employee_log;
id          emp_id      created_at         
----------  ----------  -------------------
1           1           2018-04-16 13:42:15

这个纪录是触发器的结果

类似的,可以根据需要在 UPDATE 和 DELETE 操作上创建触发器 ( Trigger )

SQLite 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.