1. Descripción del problema
1. La versión de la base de datos MySQL utilizada antes era 5.7.23-log. Utilice REPLACE(UUID(), '-', '') al insertar datos en lotes. No hay problema de duplicación.
2. Más tarde, cuando la base de datos se actualizó a 5.7.36, ya no se pudo utilizar el mismo procedimiento almacenado porque se repitió REPLACE(UUID(), '-', '').
Aquí está el procedimiento almacenado:
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. El mismo procedimiento almacenado se puede ejecutar normalmente en MySQL versión 8 o superior y no hay problema de duplicación.
2. Solución a la base de datos de versiones con problemas de duplicados:
1. Reemplace REPLACE con MD5: genere una cadena de 32 bits que cumpla con los requisitos de la clave principal y no contenga "-"