Mysql数据处理/行转列/列转行/分割/拼接/数据复制汇总
mysql数据处理记录(使用的 workbench)
- 生成随机数
- 逗号或分号拼接的字符串分割成多行
- 多行数据转化成用逗号拼接的字符串
- 将a表的数据添加到b表
一、生成随机数
生成18位:(19位就加颗0 / 17位就减0)
select floor(+ rand() * 10000000000000000000)
二、将字符串分割(行转列)
select a.id,substring_index(substring_index(a.b,',',b.help_topic_id+1),',',-1) as name
from
aaa a
join
mysql.help_topic b
on b.help_topic_id < (length(a.b) - length(replace(a.b,',',''))+1)
order by a.id
这段sql是用逗号分割, 把(aaa替换成 表名) (b替换成需要分割的字段名) 可直接使用
原理和解析过程去 https://sunjia-704471770-qq-com.iteye.com/blog/1912929
三、用分号拼接 (列转行)
select group_concat(name)name from 表名 group by parentuuid(逗号拼接)
分号拼接
select group_concat(name,';')name from 表名 group by parentuuid
这样的结果是 a;,b;,c;, 改进:
select replace(group_concat(name,';'),',','')name from 表名 group by parentuuid
结果 a;b;c;
四、将a表数据插入到b表
1.表结构与字段都相同
insert into b select * from a
注意:如果b表中已有数据 注意的是避免主键重复 如果报错先排查是否主键重复添加,最好的方法是先把a表的主键约束去掉 并使用 alter table 表名 drop id 去掉主键再添加(b表id自增)
2.表结构不同 只添加个别字段
insert into b (字段1,字段2) select 字段1,字段2 from a (如果字段名不一样 例:insert into b (字段1,字段2) select 字段a as 字段1,字段b as 字段2 from a )
补充:在数据数据迁移插入时,可将以上四大点配合使用 有问题评论区见。
注意:本篇文章适合练习,不适合大量数据迁移,若千万级数据请出门右拐.转载请捎带本文链接。