MySQL / MariaDB 触发器的创建、使用、查看、删除教程及应用场景实战案例

MySQL 触发器

本文首发:https://kalacloud.com/blog/how-to-manage-and-use-mysql-database-triggers

触发器(Trigger)是 MySQL 中非常实用的一个功能,它可以在操作者对表进行「增删改」 之前(或之后)被触发,自动执行一段事先写好的 SQL 代码。

本教程带领大家在实践中学习,你将学到触发器在实际应用场景中的重要应用。

在这个教程中,你是「卡拉云银行」的程序员,你正在搭建一套银行客户管理系统。在这套系统中,你需要设置在INSERT 表之前检测操作者是否输入错误数据、在 UPDATE 时,记录操作者的行为 log ,以及在DELETE 时,判断删除的信息是否符合删除规则。 这三类操作都可以使用 MySQL 触发器来实现。

如果你正在数据库的基础上搭建一套数据库管理工具或企业内部工具,推荐你试试我开发的卡拉云,详情见后文。

本教程将带你一起实践的案例

  • BEFORE INSERT : 在插入数据前,检测插入数据是否符合业务逻辑,如不符合返回错误信息。
  • AFTER INSERT : 在表 A 创建新账户后,将创建成功信息自动写入表 B 中。
  • BEFORE UPDATE :在更新数据前,检测更新数据是否符合业务逻辑,如不符合返回错误信息。
  • AFTER INSERT :在更新数据后,将操作行为记录在 log 中
  • BEFORE DELETE :在删除数据前,检查是否有关联数据,如有,停止删除操作。
  • AFTER DELETE :删除表 A 信息后,自动删除表 B 中与表 A 相关联的信息。

先决条件

在开始之前,请确保您具备以下条件:

  • 一台配置好的 Ubuntu 服务器,root 账号。
  • 服务器上配置好 MySQL Server(配置 MySQL 请看MySQL安装连接MySQL教程
  • MySQL root 账号

创建示例数据库

我们先创建一个干净的示例数据库,方便大家可以跟随本教程一起实践。我们会在这个数据库中演示 MySQL 触发器的多种工作方式。

首先,以 root 身份登录到你的 MySQL 服务器:

mysql -u root -p

出现提示时,请输入你 MySQL root 账号的密码,然后点击 ENTER 继续。看到 mysql> 提示后,运行以下命令,创建 demo_kalacloud 数据库:

CREATE database demo_kalacloud;
Output
Query OK, 1 row affected (0.00 sec)

接下来,切换到新建的 demo_kalacloud 数据库:

USE demo_kalacloud;
Output
Database changed

接着创建一个 customers 表。我们使用这个表记录银行客户的信息。这个表包括 customer_idcustomer_name,和level。咱们先把客户分为两个级别:BASICVIP

create table customers(
customer_id BIGINT PRIMARY KEY, 
customer_name VARCHAR(50), 
level VARCHAR(50) 
) ENGINE=INNODB;
Output
Query OK, 0 rows affected (0.01 sec)

接着,我们向 customers 表中添加一些客户记录。


Insert into customers (customer_id, customer_name, level )values('1','Jack Ma','BASIC');
Insert into customers (customer_id, customer_name, level )values('2','Robin Li','BASIC');
Insert into customers (customer_id, customer_name, level )values('3','Pony Ma','VIP');

分别运行三个 INSERT 命令后,命令行输出成功信息。

Output
Query OK, 1 row affected (0.01 sec)

我们使用 SELECT 检查一下三条信息是否已经写入表中:

Select * from customers;

显示 customers 表

下面我们创建另一个表customer_status,用于保存 customers 表中客户的备注信息。

这个表包含 customer_idstatus_notes 字段:

Create table customer_status(customer_id BIGINT PRIMARY KEY, status_notes VARCHAR(50)) ENGINE=INNODB;

然后,我们再创建一个 sales 表,这个表与 customer_id 关联。保存与客户有关的销售数据。

Create table sales(sales_id BIGINT PRIMARY KEY, customer_id 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值