数据库触发器
1. 建立product表,操作方式operate表
-要求
1.定义触发器实现在产品表(product)中每多一个产品,就在操作表(operate)中记录操作方式和时间以及编号记录。
注:操作说明:标记执行delete 、insert、 update
2.定义触发器实现在产品表(product)中每更新一个产品,就在操作表(operate)中记录操作方式和时间以及编号记录。
3.定义触发器实现在产品表(product)中每删除一个产品就,在操作表(operate)中记录操作方式和时间以及编号记录。
```mysql
先创建一个库,然后使用
mysql> create database product_after;
Query OK, 1 row affected (0.00 sec)
mysql> use product_after;
Database changed
(1)Product表内容 :
字段名 字段描述 数据类型 主键 外键 非空 唯一 自增
id 产品编号 Int(10) 是 否 是 是 否
name 产品功能 Varchar(20) 否 否 是 否 否
func 主要功能 Varchar(50) 否 否 否 否 否
com 生产厂家 Varchar(20) 否 否 是 否 否
address 家庭住址 Varchar(20) 否 否 否 否 否
mysql> create table product(id int(10) primary key not null unique,name varchar(20) not null,func varchar(50),com varchar(20) not null,address varchar(20));
Query OK, 0 rows affected, 1 warning (0.02 sec)
(2)operate表内容 :
字段名 字段描述 数据类型 主键 外键 非空 唯一 自增
op_id 编号 Int(10) 是 否 是 是 是
op_type 操作方式 Varchar(20) 否 否 是 否 否
op_time 操作时间 Varchar(20) 否 否 是 否 否
mysql> create table operate(op_id int(10) primary key not null auto_increment,op_type varchar(20) not null,op_time varchar(20) not null);
Query OK, 0 rows affected, 1 warning (0.04 sec)
2. 创建触发器,每次激活触发器后,都会更新operate表
- 创建product_after_insert_trigger
mysql> create trigger product_after_insert_trigger after insert on product for each row begin insert into operate (op_type,op_time) values ('insert',now()); end$$
Query OK, 0 rows affected (0.00 sec)
- 创建product_after_update_trigger
mysql> create trigger product_after_update_trigger after update on product for each row begin insert into operate(op_type,op_time) values('update',now()); end$$
Query OK, 0 rows affected (0.00 sec)
- 创建product_after_delete_trigger
mysql> create trigger product_after_delete_trigger after delete on product for each row begin insert
into operate (op_type,op_time) values ('delete',now()); end$$
Query OK, 0 rows affected (0.01 sec)
3.测试
(1)测试插入触发器(operate表中会新增一条为'insert'的记录,op_time为当前时间)
mysql> insert into product (id,name,com) values (1,'iPhone','Apple');
mysql> select * from operate;
+-------+---------+---------------------+
| op_id | op_type | op_time |
+-------+---------+---------------------+
| 1 | insert | 2025-07-21 15:43:06 |
+-------+---------+---------------------+
1 row in set (0.00 sec)
(2)测试更新触发器(operate表中会新增一条为'update'的记录)
mysql> update product set name = 'iPhone' where id = 1;
Query OK, 0 rows affected (0.03 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> select * from operate;
+-------+---------+---------------------+
| op_id | op_type | op_time |
+-------+---------+---------------------+
| 1 | insert | 2025-07-21 15:43:06 |
| 2 | update | 2025-07-21 16:52:33 |
+-------+---------+---------------------+
2 rows in set (0.00 sec)
(3)测试删除触发器(operate 表中会新增一条为 'delete' 的记录)
mysql> delete from product where id = 1;
Query OK, 1 row affected (0.00 sec)
mysql> select * from operate;
+-------+---------+---------------------+
| op_id | op_type | op_time |
+-------+---------+---------------------+
| 1 | insert | 2025-07-21 15:43:06 |
| 2 | update | 2025-07-21 16:52:33 |
| 3 | delete | 2025-07-21 16:54:26 |
+-------+---------+---------------------+
3 rows in set (0.00 sec)
(4)批量操作测试
mysql> insert into product (id,name,com) values (2,'huawei','华为'),(3,'boluo','菠萝');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from operate;
+-------+---------+---------------------+
| op_id | op_type | op_time |
+-------+---------+---------------------+
| 1 | insert | 2025-07-21 15:43:06 |
| 2 | update | 2025-07-21 16:52:33 |
| 3 | delete | 2025-07-21 16:54:26 |
| 4 | insert | 2025-07-21 16:58:03 |
| 5 | insert | 2025-07-21 16:58:03 |
+-------+---------+---------------------+
5 rows in set (0.00 sec)