mysql触发器实例

导读 MySQL触发器是一种特殊的存储过程,当满足特定条件时自动执行。以下是一个简单的MySQL触发器的实例。假设我们有两个表:`orders` 和 `aud...

MySQL触发器是一种特殊的存储过程,当满足特定条件时自动执行。以下是一个简单的MySQL触发器的实例。假设我们有两个表:`orders` 和 `audit_log`。每当在 `orders` 表中插入一个新订单时,我们希望将订单的详细信息记录到 `audit_log` 表中。

首先,假设我们有以下两个表的结构:

**orders 表**

```sql

CREATE TABLE orders (

order_id INT AUTO_INCREMENT PRIMARY KEY,

order_date DATE NOT NULL,

product_name VARCHAR(255) NOT NULL,

quantity INT NOT NULL

);

```

**audit_log 表**

```sql

CREATE TABLE audit_log (

log_id INT AUTO_INCREMENT PRIMARY KEY,

action VARCHAR(50) NOT NULL, -- 例如:INSERT、UPDATE 或 DELETE

table_name VARCHAR(100) NOT NULL, -- 被操作的表名

record_data TEXT, -- 记录的数据快照

timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 操作的时间戳

);

```

接下来,我们可以创建一个触发器,当向 `orders` 表中插入数据时,自动将相关信息记录到 `audit_log` 表中:

```sql

DELIMITER //

CREATE TRIGGER tr_order_insert

AFTER INSERT ON orders

FOR EACH ROW

BEGIN

INSERT INTO audit_log(action, table_name, record_data)

VALUES ('INSERT', 'orders', CONCAT('New order added: product - ', NEW.product_name, ', quantity - ', NEW.quantity));

END; //

DELIMITER ;

```

这个触发器的功能描述如下:

* 当在 `orders` 表中插入一个新的订单时,该触发器会自动执行。

* 它会将 `action` 列设置为 'INSERT',表示刚刚执行了一个插入操作。

* 它会将 `table_name` 列设置为 'orders',表示操作的表是订单表。

* 它会将 `record_data` 列设置为新插入的订单的相关信息。这里我们使用了 `CONCAT()` 函数来拼接字符串,并使用 `NEW` 关键字来引用新插入的行中的列值。请注意,这只是一个简单的示例,实际的日志记录可能需要更详细或更复杂的信息。

* 最后,请注意使用 `DELIMITER` 命令来改变命令分隔符,以便在触发器内部使用多个语句。触发器定义结束后,我们再次使用 `DELIMITER` 恢复默认的分隔符。这是因为在MySQL中,分号是命令的默认分隔符,而触发器内部也可能需要使用分号。为了避免混淆,我们暂时更改分隔符。

版权声明:本文由用户上传,如有侵权请联系删除!