MySQL触发器将行插入另一个表
有时候,在数据库中的一个表更新后需要在另一个关联表中插入一些数据,如果此时手动插入数据,显然会耗费大量时间和精力。这种情况下,可以使用MySQL的触发器,让它在数据更新的同时自动地将相关数据插入到关联表中,从而提高工作效率。本文将介绍如何在MySQL中使用触发器来插入数据到另一个表。
1. 创建两个表
在MySQL中创建两个表,一个是主表,另一个是关联表。下面是两个表的创建语句:
CREATE TABLE main_table (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
temperature FLOAT NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE related_table (
id INT(11) NOT NULL AUTO_INCREMENT,
main_id INT(11) NOT NULL,
name VARCHAR(50) NOT NULL,
PRIMARY KEY (id),
INDEX (main_id),
FOREIGN KEY (main_id) REFERENCES main_table (id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2. 定义触发器
接下来,我们需要定义一个触发器来实现在更新主表数据后自动插入数据到关联表中。触发器需要定义在主表上,因为我们是在主表更新后自动插入数据到关联表中。
CREATE TRIGGER insert_related_table AFTER UPDATE ON main_table
FOR EACH ROW
BEGIN
INSERT INTO related_table (main_id, name) VALUES (NEW.id, NEW.name);
END
触发器需要指定触发时机、触发事件、执行时间、触发条件、执行内容等,以上例子中的触发器为“在主表更新后,每一行更新后执行”的触发器,每一次主表更新后都会插入一行数据到关联表中,主表和关联表通过id进行关联,每一行数据关联的id是主表中更新后的id,关联表中的name与主表中更新后的name相同。
3. 测试触发器
现在我们可以在主表中插入一些数据并测试触发器了。下面是主表插入数据的语句:
INSERT INTO main_table (name, temperature) VALUES ('apple', 0.6), ('banana', 0.2);
执行完毕后,我们可以查看主表和关联表的数据:
SELECT * FROM main_table;
id | name | temperature
---|--------|-----------
1 | apple | 0.6
2 | banana | 0.2
SELECT * FROM related_table;
id | main_id | name
---|---------|------
1 | 1 | apple
2 | 2 | banana
可以看到,主表中有两行数据,分别对应‘apple’和‘banana’两个水果,关联表中也有两行数据,分别对应着主表中的两行数据,即在主表中插入数据后,关联表自动插入了对应的数据。
4.总结
通过以上步骤,我们成功地使用了MySQL触发器将一张表中的数据插入到另外一张表中。其中,关键在于定义了一个触发器,通过这个触发器我们可以精确地指定在什么时候生成插入数据到关联表的事件,这大大提高了工作效率。在实际应用中,我们可以根据需要对触发器进行调整和优化,使得其能够更好地满足我们的需求。