sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo hacer una inserción masiva en MySQL?

Una inserción masiva en MySQL es cuando necesita insertar muchos registros en una tabla a la vez. Se puede utilizar para crear rápidamente datos para realizar pruebas. Es tedioso volver a escribir la declaración de inserción para cada fila. Así es como puede realizar una inserción masiva en MySQL.

Inserción masiva en MySQL

Sintaxis

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( a1, a2,...aN ),( b1, b2,...bN ),..;

a1, a2, a3,... – valores para campo1
b1, b2, b3,... – valores para campo2
c1, c2, c3,... – valores para campo3

Ejemplo
Para una tabla table_name con columnas a, b, c

mysql> INSERT INTO table_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9),(3,3,3);
+------+------+------+
|   a  |   b  |   c  |
+------+------+------+
|   1  |   2  |   3  |
|   4  |   5  |   6  |
|   7  |   8  |   9  |
|   3  |   3  |   3  |
+------+------+------+

Como puede ver, la inserción masiva en MySQL permite filas/columnas duplicadas. Puede causar claves primarias duplicadas. Así es como puedes evitarlo.

Inserción masiva en MySQL sin duplicados

Usamos la cláusula ON DUPLICATE KEY. Detecta valores duplicados de la clave principal. También agregamos una cláusula UPDATE para actualizar el valor duplicado.

Sintaxis

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( a1, a2,...aN ),( b1, b2,...bN ),..
                       ON DUPLICATE KEY
                       UPDATE primary_key_field=<expression> ;

a1, a2, a3,... – valores para campo1
b1, b2, b3,... – valores para campo2
c1, c2, c3,... – valores para campo3

Ejemplo
Para una tabla table_name con columnas a, b, c y c es la clave principal

mysql> INSERT INTO table_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9),(3,3,3)
ON DUPLICATE KEY UPDATE c=c+1;
+------+------+------+
|   a  |   b  |   c  |
+------+------+------+
|   1  |   2  |   3  |
|   4  |   5  |   6  |
|   7  |   8  |   9  |
|   3  |   3  |   4  |
+------+------+------+

También puede actualizar el valor en función de otras columnas