Insert condicional en MySQL

Bases de datos

A veces surge la necesidad de añadir un registro a una tabla si se cumple una determinada condición. La primera idea que viene a la mente podría ser hacer un transacción, donde primero compruebas esa condición, y de cumplirse se lanza la insert. Pero, en determinadas ocasiones o entornos estó puede llegar a ser complicado o imposible. Si quieres añadir un registro en una tabla si no existe, también se podría hacer un insert ignore, pero si la condición no viene de su primary key tampoco daría resultado.

En otros SGBD como Oracle o SQL Server, se podría llegar a hacer un merge, pero en MySql esta instrucción no es viable por lo que surge "dual”. Dual es una tabla originaria de Oracle, que tiene una sola columna y puede servirnos de comodín a la hora de realizar la insert condicional. Con un pequeño ejemplo lo vemos mejor:

INSERT INTO table_1 (user_id, importe)
SELECT 1, 10
FROM dual
WHERE not exists (SELECT * 
                  FROM table_2 
                  WHERE user_id=1 AND date(fecha)=date(now()))

En el ejemplo podemos ver como ponemos la insert normalmente, pero para añadir el registro, usamos una select de la tabla dual con los datos a insertar. Luego, marcamos la condición deseada en el where de esta consulta, consiguiendo así la insert condicional en MySql.

En oracle esta tabla tiene muchos más usos como hacer operaciones matemáticas, usar funciones, etc... ya que no se permite realizar una consulta sin un FROM.

Si quieres leer más articulos como este, sigueme: @ander_gs
Compartir en: