Mysql
 sql >> Datenbank >  >> RDS >> Mysql

myisam platziert eine Tabellensperre auf der Tabelle, auch wenn es sich um eine 'select'-Abfrage handelt?

MyISAM hat verschiedene Arten von Sperren. Ein SELECT Der Vorgang platziert eine READ LOCK auf dem Tisch. Es können jederzeit mehrere aktive Lesesperren vorhanden sein, solange keine WRITE LOCKS aktiv sind . Operationen, die die Tabelle ändern, z. INSERT , UPDATE , DELETE oder ALTER TABLE platzieren Sie eine SCHREIBSPERRE auf dem Tisch. Eine Schreibsperre kann nur auf eine Tabelle gesetzt werden, wenn keine aktiven Lesesperren vorhanden sind; Wenn es aktive Lesesperren gibt, stellt MyISAM die zu aktivierende Schreibsperre in die Warteschlange, sobald alle aktiven Lesesperren abgelaufen sind.

Ebenso wird bei einer aktiven Schreibsperre beim Versuch, eine Lesesperre auf einer Tabelle zu setzen, die Sperre (und die zugehörige Abfrage) in die Warteschlange gestellt, bis die Schreibsperre für die Tabelle abgelaufen ist.

Letztendlich bedeutet das alles:

  • Sie können beliebig viele aktive Lesesperren haben (auch geteilte Sperren genannt)
  • Sie können nur eine aktive Schreibsperre haben (auch exklusive Sperre genannt)

Weitere Informationen finden Sie unter:http://dev.mysql. com/doc/refman/5.5/en/internal-locking.html