触发器从多个表 MySQL 中插入多个数据

Posted

技术标签:

【中文标题】触发器从多个表 MySQL 中插入多个数据【英文标题】:Trigger Insert multiple data from multiple table MySQL 【发布时间】:2018-01-03 08:31:55 【问题描述】:

我想问一些事情。 我想使用触发器添加新数据。来自多个数据库表的值数据,我想使用“|”作为分隔符。例如“VALUE1 | VALUE2”,结果必须是 christin |纽约

我的触发代码示例:

begin
 DECLARE value1 VARCHAR(50);
 DECLARE value2 VARCHAR(50);

 SELECT some_item INTO value1 FROM table1 WHERE id=NEW.id;
 SELECT some_item2 INTO value2 FROM table2 WHERE id=NEW.id;
   INSERT INTO my_table(id,new_value)values( NEW.id, value1 | value2);

end

我应该如何编写我的代码?我没有任何错误,但 value1 和 value2 的结果是错误的。结果只是“value1 | value2”而不是“christin | new york”。

谢谢

【问题讨论】:

【参考方案1】:

我发现你想连接两个字符串,不是吗?

-- you should use function CONCAT_WS
INSERT INTO my_table(id,new_value)values( NEW.id, CONCAT_WS('|', value1, value2) );

你可能通过 misatke 申请了bit operator。

【讨论】:

我会使用 CONCAT_WS 而不是 CONCAT——如果 value1 或 value2 为 NULL——函数 CONCAT 的结果也返回 NULL。 SELECT CONCAT('xmass', '|', NULL) FROM dual; -> 空【参考方案2】:

我已经知道答案了。我只是在我的插入查询中使用 concat 。 我现在的查询:

begin
  DECLARE value1 VARCHAR(50);
  DECLARE value2 VARCHAR(50);

  SELECT some_item INTO value1 FROM table1 WHERE id=NEW.id;
  SELECT some_item2 INTO value2 FROM table2 WHERE id=NEW.id;
  INSERT INTO my_table(id,new_value)values( NEW.id, concat(value1," | ",value2));

  end

谢谢你的回答

【讨论】:

【参考方案3】:

我希望您尝试通过SELECT 命令为变量赋值。如果是,请尝试这样做:

SELECT some_item INTO @value1 FROM table1 WHERE id=NEW.id;
SELECT some_item2 INTO @value2 FROM table2 WHERE id=NEW.id;

假设@value1@value2 是脚本顶部定义的变量。

【讨论】:

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

触发器处理表更新

mysql数据库insert插入重复问题

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

触发插入多个表

Oracle之触发器

MYSQL,触发器,实现多个表共用ID不重复