要復(fù)制student里的部分?jǐn)?shù)據(jù),到student表里,用的是 insert into select。。。 開始生成uuid是帶【’-‘】的,可是用replace替換就有問題,只生成一個uuid 把打印出來的sql在MySQL視圖工具里直接執(zhí)行時沒有問題的,可是就在mybatis里 就出現(xiàn)這樣的問題,而且是同replace一起使用的時候。
mysql數(shù)據(jù)庫包 mysql-connector-java 版本是5.1.19,此版本會出現(xiàn)這個問題,換成5.1.30版本,沒有問題,如果不想換,可以試試下面的方法
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`),) Mybatis mapper.xml <insert id="insertCopy"> INSERT INTO name(id,`name`,tid) SELECT UUID(),`name`,#{newtid} FROM student WHERE tid= #{oldtid} </insert>這種情況生成uuid是帶【‘-’】的,長度為36位,數(shù)據(jù)庫定義好id是32位 所以就想直接用replace替換掉【‘-’】不就可以了,可是…..
<insert id="insertCopy"> INSERT INTO name(id,`name`,tid) SELECT REPLACE(UUID(),'-',''),`name`,#{newtid} FROM student WHERE tid= #{oldtid} </insert>報錯: Duplicate entry ‘4534c15dc2a111e6a9ab000ec6c596eb’ for key ‘PRIMARY’,顯然主鍵沖突了, REPLACE (UUID(), ‘-‘, ”) 僅執(zhí)行了一次,
<insert id="insertCopy"> INSERT INTO name(id,`name`,tid) SELECT REPLACE(temp.tempId,'-',''),`name`,#{newtid} FROM (SELECT UUID() tempId,item.* FROM student stu WHERE tid= #{oldtid}) temp </insert>報錯: 還是這個問題,怎么辦呢,加個group
<insert id="insertCopy"> 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 </insert>搞定!可以批量生成不同的UUID了
新聞熱點
疑難解答
圖片精選