使用MySQL触发器将单个记录拆分为多个记录

使用MySQL触发器将单个记录拆分为多个记录,mysql,triggers,insert,Mysql,Triggers,Insert,我想在MySQL中创建一个before或after insert触发器,它根据一个特殊的字符分隔值将一条记录拆分为多条记录 一条记录被添加到我的表中,如下所示: INSERT INTO person (id, name, number) VALUES (3, John, 2|5|6); 插入触发器应获取数字字段,并根据|字符分割值。 然后它应该创建三个新记录: INSERT INTO person (id, name, number) VALUES (3, John, 2); INSERT I

我想在MySQL中创建一个before或after insert触发器,它根据一个特殊的字符分隔值将一条记录拆分为多条记录

一条记录被添加到我的表中,如下所示:

INSERT INTO person (id, name, number)
VALUES (3, John, 2|5|6);
插入触发器应获取数字字段,并根据|字符分割值。 然后它应该创建三个新记录:

INSERT INTO person (id, name, number)
VALUES (3, John, 2);
INSERT INTO person (id, name, number)
VALUES (4, John, 5);
INSERT INTO person (id, name, number)
VALUES (5, John, 6);
然后删除初始记录


这可能吗?谢谢。

好吧,你可以把这样的东西放在触发器里

数据:

查询:

WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM cte WHERE n <= 
  (SELECT CHAR_LENGTH(number)-CHAR_LENGTH(REPLACE(number,'|','')) FROM bad_table)
)
SELECT id+n-1 id
     , name
     , SUBSTRING_INDEX(SUBSTRING_INDEX(number,'|',n),'|',-1)x 
  FROM cte
  JOIN bad_table;

+------+------+------+
| id   | name | x    |
+------+------+------+
|    3 | John | 2    |
|    4 | John | 5    |
|    5 | John | 6    |
+------+------+------+

为什么首先要有一个带分隔符的列表?它是第三方表单的输出。无法更改。有一个窗体的输出是数据库表中的一行吗?你确定吗?是的。记录以与示例类似的方式添加到表中。我不能改变这部分。我必须将添加到多个记录中的记录拆分。我想问的是,在触发器之前或之后,是否可以以及如何实现这一点。
WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM cte WHERE n <= 
  (SELECT CHAR_LENGTH(number)-CHAR_LENGTH(REPLACE(number,'|','')) FROM bad_table)
)
SELECT id+n-1 id
     , name
     , SUBSTRING_INDEX(SUBSTRING_INDEX(number,'|',n),'|',-1)x 
  FROM cte
  JOIN bad_table;

+------+------+------+
| id   | name | x    |
+------+------+------+
|    3 | John | 2    |
|    4 | John | 5    |
|    5 | John | 6    |
+------+------+------+