mysql的触发器怎么做
时间 : 2023-03-22 17:47:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

MySQL的触发器是数据库中一种非常有用的功能,当满足特定的条件时,可以自动执行一系列操作。如果你想在MySQL创建一个触发器,需要以下步骤:

1. 创建一个表

首先,你需要创建一个表。例如,我们创建一个名为“students”的表,包含id、姓名、性别和分数:

CREATE TABLE students (

id INT(11) NOT NULL AUTO_INCREMENT,

name VARCHAR(50) NOT NULL,

sex ENUM('男','女') NOT NULL,

score INT(11) NOT NULL,

PRIMARY KEY (id)

);

2. 创建一个触发器

接下来,我们需要创建一个触发器。例如,我们创建一个名为“update_score”的触发器,当分数上升时更新History表中的信息:

CREATE TRIGGER update_score

AFTER UPDATE ON students FOR EACH ROW

BEGIN

DECLARE user VARCHAR(50);

DECLARE scoreChange INT(11);

SELECT USER() INTO user;

SET scoreChange = NEW.score - OLD.score;

INSERT INTO History (student_id, user, score, score_change, update_time)

VALUES (NEW.id, user, NEW.score , scoreChange , NOW());

END;

在此触发器中,我们使用AFTER UPDATE语句,它会在更新数据之后执行。FOR EACH ROW语句告诉MySQL,这个触发器需要为每一行数据执行。这里,我们创建了一个名为“update_score”的触发器,当一个学生的分数上升时,它将执行以下操作:

- 确定用户

- 计算分数的变化量

- 将这些信息插入到History表中

3. 测试触发器

现在我们已经成功创建了一个触发器,我们可以测试它是否正常工作。首先,让我们向“students”表中添加一些数据:

INSERT INTO students (name, sex, score) VALUES ('张三','男',60),('李四','女',80),('王五','男',70);

然后我们可以用UPDATE语句来改变分数:

UPDATE students

SET score=90

WHERE id=1;

现在如果我们查询“History”表,我们应该能看到一条记录,显示张三的分数已经从60分升到90分。

这就是如何使用MySQL创建触发器的简单过程。通过使用触发器,你可以自动执行一些操作,并在必要的时候更新信息,减少了手动操作的繁琐性和出错率。

MySQL的触发器(Trigger)是一种特殊的存储过程,它会在某些特定的事件后自动执行。这些事件可以是INSERT、UPDATE和DELETE操作。

使用触发器可以在数据库中实现各种自动化业务逻辑,如记录日志、维护历史版本、限制数据插入等。本文将介绍如何创建MySQL的触发器。

### 语法

MySQL中创建触发器的语法如下:

CREATE TRIGGER trigger_name

{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name

FOR EACH ROW

BEGIN

-- 触发器执行的语句

END;

- **trigger_name**:触发器名称。

- **BEFORE | AFTER**:指定触发器在事件之前或之后执行。

- **INSERT | UPDATE | DELETE**:指定触发器在哪种事件触发。

- **table_name**:指定触发器所在的表名。

- **FOR EACH ROW**:表示针对每条记录触发执行操作。

- **BEGIN...END**:触发器要执行的语句块。

### 实例

下面是一个创建触发器的实例,该触发器用于在“orders”表中,将每条新记录的创建时间记录到“order_logs”表中:

CREATE TRIGGER order_logs_trigger

AFTER INSERT ON orders

FOR EACH ROW

BEGIN

INSERT INTO order_logs (order_id, create_time, action) VALUES (NEW.id, NOW(), 'create');

END;

上面的触发器中:

- **order_logs_trigger** 是创建的触发器的名称。

- **AFTER INSERT**:表示在“orders”表中插入数据后执行。

- **orders**:是触发器所在的表名。

- **NEW.id**:表示插入的记录的自增ID(如id为主键且为自增ID)。

- **NOW()**:是MySQL内置函数,用于获取当前时间。

- **create**:是一个自定义的操作类型,用于在记录日志表中标记该操作类型。

### 触发器注意事项

以下是触发器的一些注意事项:

1. 单个表上的触发器数是有限的,取决于MySQL版本和配置。一般建议不要超过10个。

2. 触发器中不能使用COMMIT或ROLLBACK语句。如果要对触发器操作进行回滚,可以抛出异常或使用SIGNAL语句(需要MySQL 5.5及以上版本)。

3. 触发器中可以访问NEW和OLD关键字。NEW关键字表示要改变的记录,OLD关键字表示将要删除的记录。

4. 同一张表上的触发器之间的执行顺序是不确定的,需要注意避免触发器之间互相影响。

5. 触发器执行得越多,性能越差。需要在设计触发器时,考虑性能问题和响应时间。

### 总结

MySQL的触发器可以在某些特定的事件后自动执行,提高数据库操作的自动化程度,如记录日志、维护历史版本、限制数据插入等。使用前需要了解其语法和注意事项。