Insert ignore vs replace en mysql

Hoy vamos a traeros la diferencia que hay entre las distintas formas de insertar valores en la base de datos de forma que no nos de error. Ya os habrá tocado enfrentaros al problema de que es necesario insertar valores en una base de datos, pero para ello es necesario comprobar previamente si existen o no existen en la BBDD. Mediante estas órdenes no será necesario hacerlo, puesto que el maravilloso mundo del mySQL lo hará por vosotros:

Insert ignore into

INSERT IGNORE insertará las filas de la misma forma que INSERT pero con la excepción de que ignorará las filas que tengan valores duplicados y continuará la ejecución sin dar un error. Cualquier fila que contiene un valor duplicado no será insertado.

Un ejemplo de query puede ser:

INSERT IGNORE INTO mi_tabla( columna_indice_unico, otra_columna ) VALUES( 1, ‘otro valor’ );

Replace

REPLACE funciona de la misma forma que INSERT, exceptuando que si encuentra una fila duplicada elimina el original y después continua con el insert.

Un ejemplo de query puede ser este:

REPLACE INTO mi_tabla( columna_indice_unico, otra_columna ) VALUES( 1, ‘otro valor’ )

Insert … on duplicate key update

INSERT … ON DUPLICATE KEY UPDATE insertará cualquier fila de no duplicados como normalmente. Sin embargo, cuando encuentra una columna replicada lo que hará será actualizar la columna original.

Un ejemplo de query puede ser:

INSERT INTO mi_tabla( columna_indice_unico, otra_columna ) VALUES( 1, ‘otro valor’ ) ON DUPLICATE KEY UPDATE otra_columna = ‘valor de actualización de duplicado’;

Cómo mostrar los registros realizados hace menos de 24 horas en mysql

El problema con el que me enfrentaba era la necesidad de obtener todos los registros que se habían generado hacía más de 24 horas que cumplían unos parámetros.

Para ello utilizaremos principalmente 3 métodos que permite mysql:

  • NOW() Nos da el datetime de ese mismo momento
  • TIMEDIFF(a,b) Nos da la diferencia de datetimes entre dos variables.
  • HOUR Transforma en horas un datetime

El resultado obtenido es la siguiente sql:

SELECT * FROM user u WHERE HOUR(TIMEDIFF(NOW(), u.last_activity)) <=24

Con ello en mi caso obtenemos a todos los usuarios que han tenido actividad en las últimas 24 horas.

Diferencias entre MySQL y SQLite. ¿Cuando usar cada uno?

Hoy toca adentrarse en el mundo de las bases de datos debido a que he estado buscando información acerca de qué tipo de base de datos puedo usar en aplicaciones móviles.

La diferencia principal es que MySQL está orientado a servicio mientras que SQLite está orientado a fichero, lo cual significa que MySQL es un servidor que atiende peticiones que se le realizan a un puerto e Ips determinados mientras que SQLLite contiene toda la información en un fichero local.

 

SQLLite

  • Configuración rápida, solo es necesario incluir una librería en la app.
  • Embebido, no es necesario pensar en conexiones
  • Fácilmente testeable
  • No es escalable
  • No tiene usuarios ni permisos
  • No mejora el rendimiento: No optimiza selects, no cachea queries

 

MySQL

  • Escalable: MySQL fácilmente puede crecer si la aplicación usada necesita más.
  • Mejores opciones para mejorar el rendimiento.
  • Tiene permisos de usuarios que es necesario

En el caso de los móviles SQLite es una muy buena opción puesto que no suelen tener las apps muchos datos. En caso de tenerlos y de necesitar una BBDD flexible y que pueda escalarse nos tocará realizar llamadas a Apis desde las cuales solicitar la información a MySQL.

MongoDB y comparación con mySQL

Hoy me he puesto a averiguar un poquito más qué es MongoDB y a ver comparaciones con otro sistema de BBDD como mysql.

MongoDB es un sistema de base de datos NoSQL que es multiplataforma (Windows/Linux/OSx) y que está orientado a documentos (es de esquema libre, de otra forma… puedes meter lo que quieras sin ningún parecido entre unas cosas y otras). Está escrito en C++ con lo cual hace que se encuentre bastante cercano a la capa de hardware.

Las características más destacables de este sistema es su velocidad y su sistema de consulta de los contenidos de la base de datos.

La información se almacena en un tipo de jSON que se llama BSON (Binary jSON), y esto es así porque permite una búsqueda mucho más rápida de los datos (aunque siempre se trabajará con elementos jSON).

Por lo que he estado viendo en varias webs de rendimientos en todos los casos es más rápido que mySQL exceptuando cuando es necesario hacer queryes que tengan lo que llaman funciones de agregación (como por ejemplo groupby).

Links interesantes