MySQL reemplaza uuid REPLACE(UUID(), '-', '') problema duplicado, múltiples soluciones

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 "-"

 

おすすめ

転載: blog.csdn.net/WXF_Sir/article/details/131129276