INSERT en MySQL: cómo evitar duplicados
Clase 11 de 24 • Curso de SQL y MySQL 2018
Contenido del curso
Clase 11 de 24 • Curso de SQL y MySQL 2018
Contenido del curso
Sebastian Ruiz Garcia
Geovany Uribe Aguirre
Victor Luis Landaeta Jimenez
Luis Miguel Gutierrez Ramirez
Greida Mendoza
Daniel Andrés Giraldo Benites
Pablo Acuña
christian jordy mamani sucasaire
Jhonwil Abraham González Pérez
Jose Luis Chavez Uriarte
Fernando Orozco Velasquez
Deivis Dany Jiménez Hernández
Cristian Orozco Benjumea
Pablo Reyes Abarca
Santiago Morales
Rodolfo Venegas Contreras
Kenneth Steve Aguilar Cascante
Facundo Nicolás García Martoni
Juan Camilo Lezcano Benitez
Angel de Jesus Quintero Pereira
David Amador Morales
adanfelio castro
Javier Romero
David Andres Zapata Florez
Julián Andrés Santos Méndez
JUAN RONALD FABIAN MENDOZA
Diego Forero
Jhonwil Abraham González Pérez
Nestor Alfonso Portela Rincón
Facundo Nicolás García Martoni
Damian E Cabrera Toledo
Bayron Steven Trujillo Rico
Luis Lazcano
Royer Guerrero Pinilla
Hugo Orlando Gonzalez
Wilson Delgado
Edith Giselle Lopez Lopez
Juan Esteban Mejia Ortiz
Alejandro Sanchez
Alex Fernández
Si en el 1er y 3er ejemplo de INSERT les marca el error:
ERROR 1366 (HY000): Incorrect integer value: '' for column 'author_id' at row 1
Esto puede solucionarse usando NULL, el ejemplo de clase hace mención que sea ‘’ (Únicamente comillas simples) donde se insertan los datos en vez de NULL , si las comillas simples se agregan marcara un error ya que está tomando ese apartado como STRING y en la tabla authors especificamos que sea INTEGER, también puede usarse el 1 (pues es un entero), así que sea 1 o NULL en donde se insertan los datos estará correcto, quedaría como:
Ejemplo 1: INSERT INTO authors (author_id, name, nationality) VALUES (NULL, ‘Juan Rulfo’, ‘MEX’);
Ejemplo 3: INSERT INTO authors VALUES (NULL, ‘Juan Gabriel Vásquez’, ‘COL’);
Pero al tener una sentencia de auto increment ¿Qué pasa si uno le da 1?
Buen aporte gracias
Formas de insertar una nueva fila:
de forma explicita todos los atributos:
INSERT INTO authors(author_id, name, nationality ) VALUES ('', 'Juan Rulfo', 'MEX');
de forma explicita solo algunos de los atributos:
INSERT INTO authors(name, nationality ) VALUES ('Gabriel Garcia Márquez', 'COL');
de forma implícita todos de los atributos:
INSERT INTO authors VALUES ('', 'Juan Gabriel Vasquez', 'COL');
Insertando multiples lineas:
INSERT INTO authors(name, nationality ) VALUES ('Juan Rulfo', 'MEX'), ('Gabriel Garcia Márquez', 'COL'), ('Juan Gabriel Vasquez', 'COL');
NOTA: Se pueden insertar multiples fila de las mismas 3 formas de insertar una sola fila.
También es válido:
INSERT INTO authors SET name = 'Juan Rulfo', nationality = 'MEX';
exacto hay muchas manera de ejecutar el comando INSERT pero su uso depende de cuantos datos tengas casi siempre terminaras usando el múltiple lineas
En la versión de Mysql que estoy usando me da error cuando le paso el author_id con el valor VALUES(’ ',…) pude subsanar el error pasando el valor ‘0’, y al ser AUTO_INCREMENT le asigna el id correspondiente.
supongo que esto se debe a que en tu tabla al momento de crear el campo author_id le pusiste NOT NULL
Si es AUTO_INCREMENT no deberías pasarle valores mediante en INSERT debido a que dañas el AI. Ese valor aumenta a medida que se crean nuevos registros…
Aquí les dejo la inserción de todos los datos en el vídeo;
INSERT INTO authors (name, nationality) VALUES('Juan Rulfo', 'MEX'), ('Gabriel García Márquez', 'COL'), ('Juan Gabriel Vasquez', 'COL'), ('Julio Cortázar', 'ARG'), ('Isabel Allende', 'MEX'), ('Octavio Paz', 'MEX'), ('Juan Carlos Onelli', 'URU');
Gracias por la ayuda, solo una pequeña correción Isabel Allende es chilena no mexicana 😁
UPDATE author SET nationality = 'CHL' WHERE name = 'Isabel Allende';
A los que le arroja el error:
ERROR 1366 (HY000): Incorrect integer value: '' for column 'author_id' at row 1
Prueben con cambiar el campo de ‘’ por NULL:
INSERT INTO authors(author_id, name, nationality) VALUES(NULL, 'Gabriel García Marquez', 'COL');```
Sirvió. El id lo tomó como "1"
Gracias por el aporte!! :)
Hay varios videos del curso mal editado, en el cual se esta explicando cierta acción, y luego se corta el video y comienza con la misma explicación, en este video se puede apreciar desde el minuto 3:336 seg al 4:22.
Podrían tomarse la molestia de editar bien los videos, tan reiterativo el error que llega a ser molesto.
el vídeo Definiendo el Proyecto y Generando Entidades de PlatziStore: Pasos 1 y 2 también esta plagado de esos errores
Hola @rvngsclg! Gracias por reportar el error, este ya fue solucionado 😉 cada día hacemos todo lo posible por mejorar Platzi, siempre que creas que algo está mal o no debería estar ahí no dudes en enviarme un mensaje privado o reportar el error con el botón "Reportar un problema" que se encuentra debajo del video de la clase
Considero que para no repetir paises sería conveniente crear una tabla adicional en la cual estén los países.
9-Comando INSERT
Es buena práctica:Tener una buen modelo de bases de datos y un buen modelo de negocio que evite la duplicidad de información ya que esto nos ahorra el tiempo de procesamiento, ahorra en espacio.
Es buena práctica realizar inserciones de 50 registros máximo. Esto no es necesariamente obligatorio pero funciona muy bien y esto se hace porque sí hay algún problema en la inserción sólo se pierde datos de 50 a 50.
/*Existe varias formas de hacer insert, según las versiones de mysql que tengamos instalados estas son algunas de ellas*/ INSERT INTO `authors` (author_id,name,nationality) VALUES ( '','Juan Rulfo','MEX'); INSERT INTO `authors` (author_id,name,nationality) VALUES ('','Gabriel García Máquez','COL'); INSERT INTO `authors` VALUES ('Juan Gabriel Vasquez','COL');
/*pero la versión que manejamos esta es una de las que admite*/ INSERT INTO `authors` (name,nationality) VALUES ('Juan Rulfo','MEX');
/*otra forma, que sí funciona*/ INSERT INTO `authors` (name,nationality) VALUES ('Juan Rulfo','MEX'), ('Gabriel García Máquez','COL'), ('Juan Gabriel Vasquez','COL'), ('Julio Cortázar','COL'), ('Isabelle Allende','CHI'), ('Octavio Paz','MEX'), ('Juan Carlos Onetti','URU');
/*o si sabemos que hay un id que no existe podemos insertarlos juntos con su id*/ INSERT INTO `authors` (author_id,name,nationality) VALUES ('16','Pablo Neruda','MEX');
Buen aporte, gracias.
Otra forma de insertar puede ser de la siguiente manera:
Sin especificar los campos a insertar solo indicando los valores utilizando un SELECT INSERT INTO authors SELECT '','Juan Gabriel Vazques','COL';
Especificando todos los campos de la tabla a insertar utilizando un SELECT. INSERT INTO authors (author_id,name,nationality) SELECT '','Gabriel Garcia Marquez','COL';
**Especificando solo algunos campos de la tabla a insertar **utilizando un SELECT INSERT INTO authors (name,nationality) SELECT 'Julio Cortaza','ARG';
Saludos.
bueno ya sabemos insertar pero ustedes se preguntaran y como ++eliminamos++ el contenido que insertamos dentro de la base de datos, pues déjame darte este aporte te servirá :) les presento a mi amigo DELETE.
Si mandamos la cadena vacia ' ', me sacó error, por eso mejor mandamos un null para que el campo exista pero sin informacion
Me pasó lo mismo, debe ser por la version de MySQL que manejamos.
Buenas tardes Profesor Alcocer , por favor estos errores como se soluciona:
1366(HY000) : Incorrect integer value : ´´ for column ´ author_id´ at row 1
1136 (21501) : Column count doesn´t match value count at row 1
Por favor comparte la consulta que estas haciendo para ayudarte a encontrar el problema.
El error esta que al momento de crear la tabla Authors le estas dando un PRIMARY KEY que ademas es AUTO_INCREMENT, esto quiere decir que de manera automática ese número va subir por cada registro que insertes. Al momento de hacer el insert deberías omitir esa columna…
Específicamente el error que a ti te esta dando es porque intentas insertar un varchar en una columna que definiste como integer (author_id).
INSERT INTO authors (name, nationality) VALUES ('Mario Vargas LLosa', 'PER')
Saludos, espero haberte ayudado
Cuando ejecuto el primer INSERT
<INSERT INTO authors(author_id, name, nationality) VALUES('', 'Juan Rulfo', 'MEX');>
Me marca el siguiente error
<ERROR 1366 (HY000): Incorrect integer value: '' for column 'author_id' at row 1 > y fue necesaria la siguiente modificación:
<INSERT INTO authors(author_id, name, nationality) VALUES(NULL, 'Juan Rulfo', 'MEX');>
Hola Néstor! Recuerda que el campo author_id es autoincremental, por lo que no deberías tocarlo al momento de insertar valores y dejar a MySQL hacer el resto 👌🏼. Un perfecto ejemplo es el que dio tu compañero @ramonsaga03
mysql> CREATE TABLE operations (
-> operation_id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> book_id INTEGER UNSIGNED,
-> client_id INTEGER UNSIGNED,
-> type ENUM('PRE','DEV','VEN') NOT NULL,
-> created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-> updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
-> ON UPDATE CURRENT_TIMESTAMP,
-> finished TINYINT(1) NOT NULL);
Query OK, 0 rows affected (0.01 sec)
Gracias por el aporte, necesitaba constatar que la tabla me habia quedado bien
En las versiones más actuales de Mysql la sisntaxis que utiliza @beco ya no es utilizada ** ' ' **.
En su lugar se utiliza NULL y 0
_"An integer or floating-point column can have the additional attribute AUTO_INCREMENT. When you insert a value of NULL (recommended) or 0 into an indexed AUTO_INCREMENT column, the column is set to the next sequence value. "
_
La solucion al problema de '' es poner NULL, ejemplo
INSERT INTO authors(author_id, name, nationality) VALUES (NULL, 'Juan Rulfo', 'MEX');
Buenísimo el INSERT INTO para el insert de varios registros a una tabla, la vd que está buenísimo
En mi caso no me permitió: -- 1 NO DEJA, POR EL ID VACIO INSERT INTO authors(author_id,name, nationality) VALUES ('','Juan Rulfo','Mex');
Me paso lo mismo que labor hiciste tu para darle solución a este problema?
A mi tampoco me ha funcionado, pero como ese campo vacío es un autoincrementable, puedes insertar el dato asi:
INSERT INTO authors (name, nationality) values ('Juan Rulfo', 'MEX');
Borra el campo vacío
Ok tiene razón al menos en mi caso la base de datos no me dejo ingresar un valor distinto a entero para el campo author_id
excelente clase.