要复制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了

更多相关文章

  1. 抱SQL SERVER大腿之我爱用视图(对大数据量的管理)
  2. 创建视图时ORA-01031
  3. 自定义视图(组合控件)
  4. RecycleView的多视图Epoxy库
  5. android listview多视图嵌套多视图
  6. Android - Espresso -滚动到非列表视图项。
  7. 导航架构组件 - 具有CollapsingToolbar的详细信息视图
  8. 仪表测试自定义视图
  9. 无法将视图添加到相对布局

随机推荐

  1. Android获取RecyclerView滑动距离
  2. Android Handler消息处理机制面试5连问
  3. Android拨打电话权限总结
  4. Android中am命令用法
  5. Android(安卓)AlertDialog 无法弹出输入
  6. Android之自定义ProgressBar
  7. Android编译系统(三):官方文档Android Bu
  8. Android中短信拦截解决方案
  9. listview圆角实现
  10. android studio调整默认的debug.keystore