创建mydb16_trigger数据库,建立product表,操作方式operate表
(1)创建mydb16_trigger数据库
create database mydb16_trigger; //创建数据库
use mydb16_trigger; //进入数据库
(2)创建product表
字段名 | 字段描述 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
id | 产品编号 | Int(10) | 是 | 否 | 是 | 是 | 否 |
name | 产品功能 | Varchar(20) | 否 | 否 | 是 | 否 | 否 |
func | 主要功能 | Varchar(20) | 否 | 否 | 否 | 否 | 否 |
com | 生产厂家 | Varchar(20) | 否 | 否 | 是 | 否 | 否 |
address | 家庭住址 | Varchar(20) | 否 | 否 | 否 | 否 | 否 |
create table product(id int(10) primary key comment '产品编号',name varchar(20) not null comment '产品功能',func varchar(20) comment '主要功能',com varchar(20) not null comment '生产厂家',address varchar(20) comment '家庭住址');
//创建product表
desc product; //查看product表属性
(3)创建operate表
字段名 | 字段描述 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
op_id | 编号 | Int(10) | 是 | 否 | 是 | 是 | 是 |
op_type | 操作方式 | Varchar(20) | 否 | 否 | 是 | 否 | 否 |
op_time | 操作时间 | Varchar(20) | 否 | 否 | 是 | 否 | 否 |
create table operate(op_id int(10) primary key auto_increment comment '编号',op_type varchar(20) not null comment '操作方式',op_time varchar(20) not null comment '操作时间');
//创建operate表
desc operate; //查看operate表属性
(4)插入product数据
insert into product(id,name,func,com,address) values
(1,'智能手机','通讯','华为','广东省深圳市'),
(2,'笔记本电脑','办公','联想',''),
(3,'智能手表','健康监测','小米','北京市昌平区');
select * from product; //查看product表数据
- 创建触发器,每次激活触发器后,都会更新operate表
- 创建product_after_insert_trigger
- 创建product_after_update_trigger
- 创建product_after_delete_trigger
- 执行语句向operate表插入操作方法
1.定义触发器实现在产品表(product)中每多一个产品,就在操作表(operate)中记录操作方式和时间以及编号记录。
delimiter $$ //将结束字符改为“$$”
create trigger product_after_insert_trigger after insert
on product for each row
begin
insert into operate(op_type,op_time)
values(concat('新增产品',new.id),now());
end$$
//create trigger--创建触发器,product_after_insert_trigger--“插入”触发器名,after insert on product--在product表每次插入数据后触发,for each row--每行数据执行一次,begin--需执行的代码开始,values--返回插入值,concat--拼接操作类型和产品ID,insert用new.id,now()--插入时时间,end--需执行的代码结束
select * from information_schema.triggers
where trigger_name='product_after_insert_trigger'\G
//查看触发器属性,information_schema--元数据,triggers--存储触发器的系统视图,\G--结束符(多行显示数据)
insert into product(id,name,func,com,address) values
(4,'无线耳机','','索尼','')$$
//执行insert,新插入product数据
select * from product$$ //查看product表数据
select * from operate$$ //查看operate表数据
注:如果需要删除触发器
drop trigger product_after_insert_trigger$$
2.定义触发器实现在产品表(product)中每更新一个产品,就在操作表(operate)中记录操作方式和时间以及编号记录。
create trigger product_after_update_trigger after update
on product for each row
begin
insert into operate(op_type,op_time)
values(concat('更新产品',old.id),now());
end$$
//create trigger--创建触发器,product_after_update_trigger--“更新”触发器名,after update on product--在product表每次更新数据后触发,for each row--每行数据执行一次,begin--需执行的代码开始,values--返回插入值,concat--拼接操作类型和产品ID,update可以用new.id和old.id,now()--插入时时间,end--需执行的代码结束
select * from information_schema.triggers
where trigger_name='product_after_update_trigger'\G
update product set address='北京市海淀区' where id=2$$
//执行update,更新product数据
select * from product$$
select * from operate$$
3.定义触发器实现在产品表(product)中每删除一个产品,就在操作表(operate)中记录操作方式和时间以及编号记录。
create trigger product_after_delete_trigger after delete
on product for each row
begin
insert into operate(op_type,op_time)
values(concat('删除产品',old.id),now());
end$$
//create trigger--创建触发器,product_after_delete_trigger--“删除”触发器名,after delete on product--在product表每次删除数据后触发,for each row--每行数据执行一次,begin--需执行的代码开始,values--返回插入值,concat--拼接操作类型和产品ID,delete用old.id,now()--删除时时间,end--需执行的代码结束
select * from information_schema.triggers
where trigger_name='product_after_delete_trigger'\G
delete from product where id=3$$
//执行delete,删除product表数据
select * from product$$
select * from operate$$
delimiter ; //将结束字符给回“;”