赞
踩
最近做一个功能,实现对MYSQL数据库表数据进行同表复制插入操作,在将拷贝后的数据插入原表时,为了避免主键冲突,需要对其主键进行处理(目前是取原表最大id+伪造了一个rownum进行处理),原始主键是bigint类型的,进行运算之后变成了科学计数法,如下:
SELECT (select max(id) from test) + (@rownum:=@rownum+1) id
from (SELECT @rownum:=0) r,test where tenant_id =10000
图片中可以看出,bigint经过计算之后,类型变成了DOUBLE,值变成了科学计数样式,不是想要的结果。
最后解决方法:
最后发现问题出在我伪造的这个rownum,需要使用MYSQL提供的CAST函数进行转换才行,修改后为:
SELECT (SELECT MAX(id) FROM test)+ *CAST((@rownum := @rownum + 1) AS SIGNED)* id
from (SELECT @rownum:=0) r,test where tenant_id =10000
正确结果如下:
另外可以参考:https://blog.csdn.net/suyujiezhang/article/details/78759321
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。