1. 题目
- 题目来源:SQL41 构造一个触发器audit_log
- 题目描述
构造一个触发器audit_log,在向employees_test表中插入一条数据的时候,触发插入相关的数据到audit中。 - 两张表
CREATE TABLE employees_test(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
CREATE TABLE audit(
EMP_no INT NOT NULL,
NAME TEXT NOT NULL
);
-
所需结果
(1)说明:
后台会往employees_test插入一条数据:INSERT INTO employees_test (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Paul', 32, 'California', 20000.00 );
然后从audit里面使用查询语句:
select * from audit;
(2)示例:
# 输入 drop table if exists audit; drop table if exists employees_test; CREATE TABLE employees_test( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ); CREATE TABLE audit( EMP_no INT NOT NULL, NAME TEXT NOT NULL ); # 输出 1|Paul
2. 题解
考察触发器(trigger)。
题解:
CREATE TRIGGER audit_log # 创建触发器
AFTER INSERT ON employees_test # 在employees_test 的INSERT 操作之后触发
FOR EACH ROW # 仅仅作用在被操作的那些行
BEGIN # 触发器 body
INSERT INTO audit VALUES(NEW.id, NEW.name); # 将新的字段id和name更新到 audit表中 (注意分号)
END;
这是面试非常规考点,了解即可,不作重点。
3. 反思:Trigger 触发器
1、创建四要素:
- 监视地点(table)
- 监视事件(update、insert、delete)
- 触发时间(before、after)
- 触发事件(update、insert、delete)
2、语法
CREATE TRIGGER <触发器名> <监视时间> <监视事件>
ON 监视地点 FOR EACH ROW
begin
触发事件
end;
参考:SQL高级特性——触发器