触发插入多个表

Posted

技术标签:

【中文标题】触发插入多个表【英文标题】:Trigger insert into multiple tables 【发布时间】:2015-03-10 08:55:44 【问题描述】:

我有 2 个表名为:train_informationaxle

Train_information

有以下几点:

train_id (PK)
train_name
train_length
number_of_axles

axle

有以下几点:

axle_id (PK)
train_id(FK)
axle

当我在 train_information 上插入一些东西时,例如将数字 16 放入 number_of_axles 中。我希望桌子 axle 自动获取相同的信息。

如何用触发器做到这一点?

编辑:

现在可以使用以下代码:

CREATE TRIGGER TriggerName AFTER INSERT ON train_information
FOR EACH
ROW 
BEGIN 
INSERT INTO axle( train_id, axle ) 
VALUES (
NEW.train_id, NEW.number_of_axles
);

END

但现在,它在表格 axle 中输入例如数字 16 但我希望它像:

axle_id = 1
train_id = 1
axle = 1

axle_id = 2
train_id = 1
axle = 2

axle_id = 3
train_id = 1
axle = 3

这可能吗?

【问题讨论】:

【参考方案1】:

您可以在Train_information 表上创建AFTER TRIGGER,如下所示:

SQL 更多关于After Triggers in SQL

CREATE TRIGGER TriggerName
   ON Train_information
   FOR INSERT
   AS
   BEGIN
      SET NOCOUNT ON
      INSERT INTO axle
        (train_id, axle)
    SELECT
        train_id, 'axle_name'
        FROM inserted
    END

MySQL 更多关于After Triggers in mysql

DELIMITER $$
CREATE TRIGGER TriggerName
   AFTER INSERT ON Train_information FOR EACH ROW
   BEGIN
      INSERT INTO axle (train_id, axle)
      VALUES (NEW.train_id, NEW.axle_name)            
    END;
$$
DELIMITER ;

【讨论】:

我收到以下错误:MySQL meldt: #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“ON train_information FOR INSERT AS BEGIN SET NOCOUNT ON”附近使用正确的语法我正在使用 phpmyadmin 那么你在使用 MySQL 吗? 是的,我点击:添加触发器。在那里我必须填写名称等和一个字段:定义。我在那里填写代码。 更新了我的答案它应该在MySQL,检查它。还添加了文档以了解触发器。 它仍然给出语法错误,但我认为我做错了什么。我去看看文档!谢谢!

以上是关于触发插入多个表的主要内容,如果未能解决你的问题,请参考以下文章

插入视图,代替触发器,身份,多个表?

SQL Server 在多个线程中插入死锁

Oracle之触发器

基于变化表中的值在插入之前触发 PL/SQL 触发器

触发器处理表更新

插入时多个数据库触发器