前言
最近在处理公司需求的时候遇到了一个问题。就是咱们一般给一个表里添加数据,一般会给id主键设置uuid当做主键值。但是发现添加数据的时候,数据库报主键重复。
问题
一般使用uuid的话就会用到uuid()这个函数来生成。如果只是REPLACE(uuid(),’-‘,’’)这样生成的话,发现是不会重复的,一旦后面加上了from表名,生成的uuid竟然都是一模一样的了,这肯定不是咱们想要的。
解决办法
方法一
修改字段的长度,从32改成36,直接存储完整的uuid “c790c97c-0a27-11e7-93b9-00163e12046e“。
如果不想修改表字段,可以参考下面的方法
方法二
1 | CONCAT(SUBSTR(REPLACE(uuid(),'-','') FROM 5 FOR 15),SUBSTR(UUID_SHORT() FROM -17 FOR 17)) |
上面的写法就能生成不重复的uuid了。
方法三
1 | md5(uuid()) |
把生成的uuid直接md5一下,也可以解决重复的问题。
后来经过查资料才发现这是mysql客户端的问题导致的。直接在命令行里输入对应的sql语句就可以不重复的生成。
最后
以上就是我针对这个问题的解答,由于能力有限,如有错误,敬请谅解。