sql >> Database >  >> RDS >> Mysql

UPDATE met SELECT, zal het elke rij of alle GESELECTEERDE records vergrendelen?

De UPDATE loopt in transactie - het is een atomic bewerking, wat betekent dat als een van de rijen faalt (bijvoorbeeld vanwege een unieke beperking), deze geen van de 5000 rijen zal bijwerken. Dit is een van de ACID-eigenschappen van een transactiedatabase.

Hierdoor is de UPDATE houd een slot op alle rijen voor de hele transactie. Anders kan een andere transactie de waarde van een rij verder bijwerken, gebaseerd op de huidige waarde (laten we zeggen update records set value =value * '2'). Deze verklaring zou een ander resultaat moeten opleveren, afhankelijk van of de eerste transactie wordt vastgelegd of teruggedraaid. Daarom moet het wachten tot de eerste transactie alle 5000 updates heeft voltooid.

Als u de vergrendelingen wilt ontgrendelen, voert u de update gewoon in (kleinere) batches uit.

PS autocommit controleert of elke verklaring in een eigen transactie wordt uitgegeven, maar heeft geen invloed op de uitvoering van een enkele vraag




  1. MySQL-query voor huidige GMT-tijd

  2. Python:gegevens opvragen op geluid

  3. Hoe records van de laatste 30 minuten op te halen in MS SQL?

  4. MySQL Foreign Key - Kan tabelnaam niet oplossen Sluiten TO