"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Se pueden hacer condicionales las declaraciones INSERT de MySQL?

¿Se pueden hacer condicionales las declaraciones INSERT de MySQL?

Publicado el 2024-11-11
Navegar:431

Can MySQL INSERT Statements Be Made Conditional?

Declaraciones INSERT condicionales en MySQL

Pregunta: ¿Es factible realizar una operación INSERT de forma condicional, similar a una ¿Declaración IF?

Elaboración:

Supongamos que necesitamos realizar un pedido de 20 artículos con ID de producto 2. Para garantizar existencias suficientes, primero verificamos la cantidad disponible :

SELECT IF(
    ( SELECT SUM(qty) FROM orders WHERE product_id = 2  )   20
    

Si el resultado es verdadero ejecutamos la consulta INSERT. Sin embargo, este enfoque es susceptible a problemas de concurrencia. Múltiples pedidos simultáneos pueden resultar en sobreventa.

Respuesta:

Sí, las declaraciones INSERT condicionales son posibles usando la siguiente sintaxis:

INSERT INTO TABLE
SELECT value_for_column1, value_for_column2, ...
FROM wherever
WHERE your_special_condition

Si la instrucción SELECT no devuelve filas (es decir, la condición especial es falsa), no se produce ninguna inserción.

Ejemplo:

Para el esquema dado:

products: id, qty_on_hand
orders: id, product_id, qty
insert into orders (product_id, qty)
select 2, 20
where (SELECT qty_on_hand FROM products WHERE id = 2) > 20;

Esta consulta solo insertará una fila si hay suficiente stock disponible. De lo contrario, no ejecutará la inserción.

Último tutorial Más>

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