Tratar con rangos de fechas superpuestos en MySQL
Insertar nuevos rangos de fechas en una tabla existente puede ser complicado, especialmente cuando se intenta evitar superposiciones con entradas existentes. En este contexto, queremos evitar insertar rangos que se superpongan con los de la base de datos para un identificador de cuenta específico (acc_id).
Si bien MySQL ofrece la opción de validar fechas usando restricciones SQL CHECK, desafortunadamente esta característica no está disponible. soportado por MySQL. PostgreSQL, por otro lado, admite restricciones CHECK, pero cambiar los motores de la base de datos puede no ser factible en todas las situaciones.
Como alternativa, podemos implementar la validación en la lógica de la aplicación. Un enfoque implica el uso de una instrucción SELECT COUNT(id) ... para comprobar si hay superposiciones antes de intentar un INSERT:
SELECT COUNT(id) FROM avail WHERE acc_id = '175' AND (start_date BETWEEN '2015-05-30' AND '2015-06-04') OR (end_date BETWEEN '2015-05-30' AND '2015-06-04') OR ('2015-05-30' BETWEEN start_date AND end_date) OR ('2015-06-04' BETWEEN start_date AND end_date);
Si el recuento devuelto es mayor que 0, la inserción se cancela debido a una superposición.
Otro método implica el uso de un desencadenador en MySQL. Se puede programar un activador para comprobar si hay superposiciones antes de que se produzca INSERTAR/ACTUALIZAR y arrojar un error si se encuentra alguno. Sin embargo, los activadores requieren una versión actualizada de MySQL.
En última instancia, la elección del enfoque depende de los requisitos específicos de su aplicación y de la viabilidad de implementarla en una de las formas admitidas.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3