En bulkinsert i MySQL är när du behöver infoga många poster i en tabell samtidigt. Den kan användas för att snabbt skapa data för testning. Det är tröttsamt att skriva om infogningssatsen för varje rad. Så här kan du massinfoga i MySQL.
Massinfoga i MySQL
Syntax
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( a1, a2,...aN ),( b1, b2,...bN ),..;
a1, a2, a3,.. – värden för fält1
b1, b2, b3,.. – värden för fält2
c1, c2, c3,.. – värden för fält3
…
Exempel
För en tabell tabellnamn med kolumnerna 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 | +------+------+------+
Som du kan se tillåter bulkinfogning i MySQL dubbletter av rader/kolumner. Det kan orsaka dubbletter av primärnycklar. Så här kan du undvika det.
Massinfoga i MySQL utan dubbletter
Vi använder ON DUPLICATE KEY-satsen. Den upptäcker dubbletter av primärnyckelns värden. Vi lägger också till en UPDATE-sats för att uppdatera dubblettvärdet.
Syntax
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,.. – värden för fält1
b1, b2, b3,.. – värden för fält2
c1, c2, c3,.. – värden för fält3
…
Exempel
För en tabell tabellnamn med kolumnerna a, b, c och c är den primära nyckeln
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 | +------+------+------+
Du kan också uppdatera värde baserat på andra kolumner