mybatis中 insert into select 批量生成uuid时 用replace去掉"-"

要复制student里的部分数据,到student表里,用的是 insert into select。。。 
开始生成uuid是带【’-‘】的,可是用replace替换就有问题,只生成一个uuid 
把打印出来的sql在mysql视图工具里直接执行时没有问题的,可是就在mybatis里 
就出现这样的问题,而且是同replace一起使用的时候。


DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` varchar(32) NOT NULL,
`name` varchar(50) DEFAULT NULL,
`tid` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`),

Mybatismapper.xml

INSERT INTO name(id,`name`,tid) 
SELECT UUID(),`name`,#{newtid}
FROM student
WHERE tid= #{oldtid}

这种情况生成uuid是带【‘-’】的,长度为36位,数据库定义好id是32位 
所以就想直接用replace替换掉【‘-’】不就可以了,可是…..



INSERT INTO name(id,`name`,tid) 
SELECT REPLACE(UUID(),'-',''),`name`,#{newtid}
FROM student
WHERE tid= #{oldtid}

报错: Duplicate entry ‘4534c15dc2a111e6a9ab000ec6c596eb’ for key ‘PRIMARY’,显然主键冲突了, 
REPLACE (UUID(), ‘-‘, ”) 仅执行了一次,



INSERT INTO name(id,`name`,tid) 
SELECT REPLACE(temp.tempId,'-',''),`name`,#{newtid}
FROM (SELECT UUID() tempId,item.* FROM student stu
WHERE tid= #{oldtid}) temp

报错: 还是这个问题,怎么办呢,加个group



INSERT INTO name(id,`name`,tid) 
SELECT REPLACE(temp.tempId,'-',''),`name`,#{newtid}
FROM (SELECT UUID() tempId,item.* FROM student stu
WHERE tid= #{oldtid} group by id) temp

搞定!可以批量生成不同的UUID了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值