数据库触发器

数据库触发器

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值