MySQL触发器实现两个表联动(mysql两表触发器)

MySQL触发器实现两个表联动

MySQL触发器可以在表中发生修改时自动执行一些指定的操作,例如更新另一个表的相应行。本文将介绍如何使用MySQL触发器实现两个表联动。

我们需要创建两个表:一个存储学生信息,一个存储成绩信息。学生表的结构如下:

CREATE TABLE students (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT NOT NULL,
gender VARCHAR(10) NOT NULL,
class VARCHAR(20) NOT NULL
);

成绩表的结构如下:

CREATE TABLE scores (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
student_id INT NOT NULL,
course VARCHAR(50) NOT NULL,
score INT NOT NULL,
FOREIGN KEY (student_id) REFERENCES students(id)
);

两个表之间的关系是:学生表的id字段是成绩表的外键,用于关联学生的成绩。

接下来,我们创建一个触发器,当学生表的一条记录被删除时,删除成绩表中与该学生相关的所有记录。触发器的代码如下:

CREATE TRIGGER delete_score
AFTER DELETE ON students
FOR EACH ROW
BEGIN
DELETE FROM scores WHERE student_id = OLD.id;
END;

解释一下代码:

– `delete_score`是触发器的名称。

– `AFTER DELETE ON students`表示触发器是在学生表的一条记录被删除后执行。

– `FOR EACH ROW`表示对每一行数据都执行一次触发器。

– `OLD`是MySQL内置的伪行变量,用于引用被修改的行的旧值(即被删除的学生记录)。

– `DELETE FROM scores WHERE student_id = OLD.id;`表示删除成绩表中`student_id`等于被删除学生记录的`id`的所有记录。

现在,我们来测试一下触发器的效果。我们向学生表插入一条数据:

INSERT INTO students (name, age, gender, class) VALUES ('小明', 15, '男', '初一一班');

接着,我们向成绩表插入一条数据:

INSERT INTO scores (student_id, course, score) VALUES (1, '数学', 90);

此时,成绩表中应该有一条数据:

SELECT * FROM scores;

结果如下:

+----+------------+--------+-------+
| id | student_id | course | score |
+----+------------+--------+-------+
| 1 | 1 | 数学 | 90 |
+----+------------+--------+-------+

现在,我们来删除学生表中的这条数据:

DELETE FROM students WHERE id = 1;

此时,在成绩表中的数据应该也被删除了。我们查询一下成绩表:

SELECT * FROM scores;

结果为空,证明触发器生效了。

以上就是使用MySQL触发器实现两个表联动的方法。你也可以根据实际需求编写其它类型的触发器,实现更多的功能。


数据运维技术 » MySQL触发器实现两个表联动(mysql两表触发器)