提问人:kwangil lee 提问时间:11/6/2023 最后编辑:SelVazikwangil lee 更新时间:11/6/2023 访问量:80
MySQL加载数据插入,将值拆分为多行
MySQL load data insert, split values to multiple rows
问:
使用 LOAD DATA LOCAL INFILE
num 列 每 6 位数字存储一次
如何参数化 load 命令以遍历数组?
Mysql版本8.0.23
在文件文本中
id length 1,
cnt length 2,
num length 500
--------------------
1 3AB1001AB1002AB1003
表A
编号 | 碳纳米管 | jué |
---|---|---|
1 | 3 | AB1001AB1002AB1003 |
我想要像下表这样的输出
表B
编号 | 碳纳米管 | jué |
---|---|---|
1 | 3 | AB1001型 |
1 | 3 | AB1002型 |
1 | 3 | AB1003型 |
答:
0赞
netragon
11/6/2023
#1
您可以使用触发器将表“a”中的一行拆分为“b”的 3 行。 触发器如下:
`CREATE TRIGGER triger1 AFTER INSERT ON a FOR EACH ROW BEGIN
SET @i = 0;
REPEAT
SET @part = SUBSTRING(NEW.num, 1 + @i*6, 6);
INSERT INTO b VALUE(NEW.id, NEW.cnt, @part);
SET @i = @i + 1;
UNTIL @i = NEW.cnt
END REPEAT;
END;`
在使用 LOAD DATA LOCAL INFILE 插入数据之前,您必须在表 'a' 上创建一个触发器。 问候。
评论
0赞
netragon
11/6/2023
当插入到表 NEW.num 中的新行与 NEW.cnt 行拆分为 .a
b
0赞
Bill Karwin
11/6/2023
#2
我能够测试这张表:
create table mytable (
id int,
cnt int,
num varchar(500)
);
我把你显示的文本行放到一个文件中:p.csv
1 3AB1001AB1002AB1003
我运行了mysql客户端,并提供了启用本地数据加载的选项:
$ mysql --local-data
然后我以这种方式加载数据文件:
mysql> load data local infile 'p.csv' into table mytable (@temp)
set id = substr(@temp, 1, 1),
cnt = substr(@temp, 2, 2),
num = substr(@temp, 3);
成功了!
mysql> select * from mytable;
+------+------+---------------------+
| id | cnt | num |
+------+------+---------------------+
| 1 | 3 | 3AB1001AB1002AB1003 |
+------+------+---------------------+
在此处阅读有关 LOAD DATA INFILE 语句的更多信息:https://dev.mysql.com/doc/refman/8.0/en/load-data.html
并在此处阅读有关 SUBSTR() 函数的信息: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substr
评论