一、问题描述
1.之前使用的MySQL数据库版本为5.7.23-log,在批量插入数据时使用REPLACE(UUID(), '-', ''),不存在重复问题。
2.后来数据库升级到5.7.36,同样的存储过程就不能使用了,原因就是REPLACE(UUID(), '-', '')重复。
这里是存储过程:
CREATE PROCEDURE `SUMMARY_MONTH` (
IN Y INT,
IN M INT
)
BEGIN
DECLARE C INT DEFAULT 0;
SELECT COUNT(*)
INTO C
FROM cell_month_flow
WHERE YEAR = Y
AND MONTH = M;
IF C = 0 THEN
INSERT INTO cell_month_flow
SELECT REPLACE(UUID(), '-', '') AS ID, CELL_ID
, YEAR, MONTH, SUM(QUANTITY) AS QUANTITY
FROM cell_allday_flow
WHERE YEAR = Y
AND MONTH = M
GROUP BY cell_id;
END IF;
END
3.同样的存储过程,在MySQL版本8以上可以正常运行,已不存在重复问题。
二、在存在重复问题版本数据库下解决方案:
1.将REPLACE替换成MD5:生成32位字符串,符合主键要求,且不存在“-”