Uma inserção em massa no MySQL é quando você precisa inserir muitos registros em uma tabela de uma só vez. Ele pode ser usado para criar rapidamente dados para teste. É cansativo reescrever a instrução insert para cada linha. Veja como você pode inserir em massa no MySQL.
Inserção em massa no MySQL
Sintaxe
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( a1, a2,...aN ),( b1, b2,...bN ),..;
a1, a2, a3,.. – valores para o campo1
b1, b2, b3,.. – valores para o campo2
c1, c2, c3,.. – valores para o campo3
…
Exemplo
Para uma tabela table_name com colunas 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 você pode ver, a inserção em massa no MySQL permite linhas/colunas duplicadas. Isso pode causar chaves primárias duplicadas. Veja como você pode evitá-lo.
Inserção em massa no MySQL sem duplicatas
Usamos a cláusula ON DUPLICATE KEY. Ele detecta valores duplicados de chave primária. Também adicionamos uma cláusula UPDATE para atualizar o valor duplicado.
Sintaxe
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 o campo1
b1, b2, b3,.. – valores para o campo2
c1, c2, c3,.. – valores para o campo3
…
Exemplo
Para uma tabela table_name com colunas a, b, c e c é a chave primária
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 | +------+------+------+
Você também pode atualizar o valor com base em outras colunas