Qué es el comando INSERT?
Cómo hacemos un INSERT?
Nota: Para evitar problemas al insertar varias filas lo hacemos en chunks (trozos) de 50.
Normalmente usamos INSERT INTO para agregar una fila en una tabla, hay dos formas de ingresar los datos:
Hacer un INSERT por filas:
# Definiendo la columna author_id
INSERT INTO authors (author_id, name, nacionality)
VALUES (NULL, 'Juan Rulfo', 'MEX');
# No definiendo la columna author_id
INSERT INTO authors (name, nacionality)
VALUES ('Gabriel García Márquez', 'COL');
# Sin definir columnas
INSERT INTO authors
VALUES (NULL, 'Juan Gabriel Vasquez', 'COL');
Al ingresar los datos tendremos algo como esto:
Hacer INSERT de varias filas:
INSERT INTO authors (name, nacionality)
VALUES ('Julio Cortázar', 'ARG'),
('Isabel Allende', 'CHI'),
('Octavio Paz', 'MEX'),
('Juan Carlos Onetti', 'URY');
Hacer INSERT de filas sin insertar columnas:
INSERT INTO authors (author_id, name)
VALUES (16 , 'Pablo Neruda');
Como vemos se agrega el id especificado, esto porque este id no existía, nacionality tiene NULL porque no especificamos nada.
<aside> 📌 Resumen: Con el comando INSERT, permite agregar los datos que son almacenados en nuestra base de datos.
</aside>
Qué es el comando ON DUPLICATE KEY?
Tip: Al escribir una sentencia SELECT y finalizarla con \G obtenemos un modo de vista más legible.
Es una extensión de INSERT con este comando podemos evitar la restricción de tener datos repetidos con PK o UNIQUE, existen dos formas de hacerlo:
Esta es la forma que nunca debes usar:
INSERT INTO clients (name, email, birthdate, gender, active, created_at)
VALUES ('Maria Dolores Gomez','[email protected]','1971-06-06','F',1,'2018-04-09 16:51:30')
ON DUPLICATE KEY IGNORE ALL;
Esta forma evita el error por completo, siempre hay que saber manejar los errores.
Forma de actualización:
INSERT INTO clients (name, email, birthdate, gender, active, created_at)
VALUES ('Maria Dolores Gomez','[email protected]','1971-06-06','F',1,'2018-04-09 16:51:30')
ON DUPLICATE KEY UPDATE active = VALUES (active);
# En lugar de usar VALUES podríamos
# colocar el valor directamente, como se muestra:
ON DUPLICATE KEY UPDATE active = 0;
Con esto logras que los datos que ingresas sean actualizados en caso de estar repetidos.
<aside> 📌 Resumen: Con este comando podemos ahorrarnos mucho tiempo y problemas, pero ojo que esto tienes que manejarlo de forma que sigas las buenas practicas para evitar futuros inconvenientes.
</aside>
Qué es un query anidado?
Cómo se hace un query anidado?
Un query andado es una sentencia que se ejecuta dentro de nuestra sentencia, puede ser peligroso si no se usa con cuiado.
Un query anidado se hace así:
INSERT INTO books (title, author_id, `year`)
VALUEs ('El laberinto de la soledad',
# Esta parte entre parentesis es un query anidado.
**(SELECT author_id FROM authors
WHERE name = 'Octavio Paz' LIMIT 1
)**,
1960
);
Ten en cuenta que esto aumenta el tiempo del resultado, elevando al cuadrado, por lo que esto será más lento.
<aside> 📌 Resumen: Un query anidado puede ser muy potente, pero debemos tener cuidado ya que puede traer problemas a futuro.
</aside>