✏️ 触发器练习 1

第 6 章 · 索引、视图和触发器 · 共 3 题 · 触发器基础

🛠 建表与测试数据(练习前先执行)

sql
-- 数据准备
drop database if exists db_t;
create database if not exists db_t
default character set utf8
collate utf8_general_ci;
use db_t;
-- 用户表
create table user(
uid int primary key auto_increment,
username varchar(50) not null,
password varchar(50) not null
);
-- 用户信息操作日志表
create table if not exists user_logs(
id int primary key auto_increment,
time timestamp,
log_text varchar(255)
);
-- -------------------------------------------------------------------

1. 创建触发器t1,当向user表中插入记录后,自动在操作日志表user_logs中插入一条记录,字段log_text的值为”有新用户注册”

在开始前先查看一下有哪些触发器
查看参考答案(可复制)
sql
select * from information_schema.triggers;

drop trigger if  exists t1;
create trigger t1
after insert on user -- 触发时机:当添加user表数据时触发
for each row
begin
insert into user_logs values(null,now(), '有新用户注册');
end;
-- 添加数据,触发器自动执行并添加日志代码
insert into user values(null,'张三','123456');
select * from user_logs;

2. 创建触发器t2,当更新了user表中的一条记录后,自动在操作日志表user_logs中插入一条记录,字段log_text的值为”用户信息发生修改”

查看参考答案(可复制)
sql
drop trigger if exists t2;
create trigger t2
after update on user
for each row
begin
insert into user_logs values(NULL,now(), '用户信息发生了修改');
end ;
-- 添加数据,触发器自动执行并添加日志代码
update user set password = '888888' where uid = 1;
select * from user_logs;

3. 创建触发器t3,当user表中的插入一条记录后,自动在操作日志表user_logs中插入一条记录,字段log_text的值由以下三部分拼接而成:’有新用户添加,信息为:’、新用户的ID、新用户的姓名、新用户的密码

insert型触发器:new表示将要或已经新增的数据
delete型触发器:old表示将要或已经删除的数据
update型触发器:old表示更新前的行,new表示将要或已经修改的数据
查看参考答案(可复制)
sql
create trigger t3
after insert
on user
for each row
begin
insert into user_logs values(null,now(),concat('有新用户添加,信息为:',NEW.uid,NEW.username,NEW.password));
end;
-- 测试
insert into user values(null,'赵六','123456');
select * from user_logs;