Låsningen är implicit, ja, men den görs inte av executeUpdate()
. Lagringsmotorn i MySQL hanterar låsningen och upplåsningen.
Varje gång du skriver till en MyISAM-tabell, väntar din fråga på att skrivlåset på tabellen ska vara tillgängligt, skrivlåset hämtas, skrivningen är klar och skrivlåset frigörs. Det finns ingen äkta skrivsamfällighet i MyISAM eftersom varje arbetare faktiskt står i kö för skrivlåset. Du får inget fel eftersom skrivförfrågningarna är serialiserade.
Situationen med InnoDB är liknande men mycket annorlunda, eftersom InnoDB bara låser en del av tabellen, vanligtvis på radnivå, där InnoDB kan låsa ett intervall inom ett index och därigenom låsa raderna i det intervallet i indexet (och lucka som föregår dem). Denna låsning är mer detaljerad än bordslåsning, vilket möjliggör förbättrat samtidighetsbeteende, men det finns ingen samtidig operation på samma rad – varje arbetare väntar på det eller de lås som den behöver.
I båda fallen är låsen implicit tagna.