sql >> Database >  >> RDS >> Mysql

MySQL:Gelijktijdige updates (via threads) op een eenvoudige tabel

De vergrendeling is impliciet, ja, maar het wordt niet gedaan door executeUpdate() . De opslagengine in MySQL zorgt voor het vergrendelen en ontgrendelen.

Elke keer dat u naar een MyISAM-tabel schrijft, wacht uw query totdat de schrijfvergrendeling op de tafel beschikbaar is, de schrijfvergrendeling wordt verkregen, het schrijven is voltooid en de schrijfvergrendeling wordt vrijgegeven. Er is geen echte schrijfconcurrency in MyISAM omdat elke werknemer in feite in de rij staat te wachten op de schrijfvergrendeling. U krijgt geen foutmelding omdat de schrijfverzoeken geserialiseerd zijn.

De situatie met InnoDB is vergelijkbaar, maar heel anders, in die zin dat InnoDB slechts een deel van de tabel vergrendelt, meestal op rijniveau, waar InnoDB een bereik binnen een index kan vergrendelen, waardoor de rijen op dat bereik in de index (en de kloof die eraan voorafgaat). Deze vergrendeling is gedetailleerder dan tabelvergrendeling, wat een verbeterd gelijktijdigheidsgedrag mogelijk maakt, maar er is geen gelijktijdige bewerking op dezelfde rij -- elke werknemer wacht op de vergrendeling of vergrendelingen die hij nodig heeft.

In beide gevallen worden de sloten impliciet ingenomen.




  1. fout bij invoegen in tabel met in plaats van trigger van entiteitsgegevensframework

  2. Overstappen van MySQL 5.7 naar MySQL 8.0 - Wat u moet weten

  3. Een sql-variabele terugsturen naar PHP

  4. Hoe verbinding maken met Mysql via C#?