【问题标题】:How to insert multiple records from a trigger in MySQL如何从 MySQL 中的触发器中插入多条记录
【发布时间】:2015-06-28 21:04:53
【问题描述】:

我是 MySQL 新手。 我想创建一个触发器,在将一条记录插入table A 后,将多条记录插入table B

插入A 的记录有一个字段NUM(类型INT(4)),我想将记录插入B,其值从X + 1NUM,其中X 是最高的B 中的号码。我知道NUMB 中不存在,因为INSERT 使用的是IF EXISTS

我尝试使用 WHILE 循环,但出现语法错误 - 看起来 MySQL 不允许在触发器中使用 WHILE

我成功插入了一条值为 NUM 的记录,但我不知道如何插入所有其他记录。

【问题讨论】:

  • Murder Mystery一样,你想要达到的目标仍然不清楚。
  • 首先,让我更正一下解释,因为我很喜欢 IF NOT EXIST,以找出表 B 中是否存在值为 NUM 的记录。其次,也许可以先向我解释为什么可以'我不是在触发器中使用 WHILE 吗?如何在触发器中执行循环(在 MySQL 中)
  • 为了进一步澄清我的问题:在表 A 中插入了一条记录,字段 Num=10。在表 B 中,最高键是 6。我想在表 B 中插入 4 条记录,键 = 7,键 = 8,键 = 9,键 = 10

标签: mysql triggers insert


【解决方案1】:

我发现我的问题主要是由于处理全局变量的语法而不是在触发器内创建集合。 这是我想要的代码:

-- 完全触发 DDL 语句 -- 注意:只允许使用 CREATE TRIGGER 语句 分隔符 $$

使用q$$

创建 定义者=root@localhost 触发q.event_AUPD 插入后q.event 每一行 -- 在此行下方编辑触发器主体代码。不要编辑上面的行

开始 DECLARE done INT DEFAULT FALSE; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

select LastNumberWaiting from A where 
            institution = new.institution and
            branch = new.branch and
            idQueue = new.queue into @ids;

ins_loop: LOOP

    set @ids := @ids + 1;
    if @ids > new.idLast then
        set done := TRUE;
    end if;

    IF done THEN
        LEAVE ins_loop;
    END IF;

    insert into B values (@ids);   # B has only one column 'id' in this example

END LOOP;

结束$$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多