sql >> Database >  >> RDS >> Mysql

Verander de tafel zonder de hele tafel te vergrendelen

Kort antwoord:Voor MySQL zijn <5.6 sloten vereist. Vanaf 5.6, en met behulp van InnoDB, vergrendelt zijn niet vereist voor veel ALTER TABLE bewerkingen inclusief het toevoegen van een kolom .

Als u MySQL 5.5 of ouder gebruikt, krijgt het een leesvergrendeling voor de hele bewerking en vervolgens een korte schrijfvergrendeling aan het einde.

Van de MySQL-documentatie voor ALTER TABLE ...

Dat wil zeggen, wanneer een kolom wordt toegevoegd, wordt de tabel voor het grootste deel van de bewerking vergrendeld en aan het einde een schrijfvergrendeling.

MySQL 5.6 heeft de Online DDL toegevoegd naar InnoDB, wat veel dingen versnelt en verbetert, zoals het wijzigen van tabellen en indexen. Het toevoegen van een kolom aan een tabel vereist niet langer tabelvergrendelingen behalve mogelijk korte exclusieve sloten aan het begin en einde van de operatie .

Het moet gebeurt automatisch, maar stel voor de zekerheid ALGORITHM=inplace . in en LOCK=none naar uw ALTER TABLE verklaring.

Er is één uitzondering...




  1. Items in MySQL bestellen via een vaste lijst?

  2. fout:Setup-script is afgesloten met fout:opdracht 'gcc' is mislukt met afsluitstatus

  3. app crasht op JSON jparser maak http-verzoek

  4. FOUT:SQLSTATE [HY000] [2002] Er kon geen verbinding worden gemaakt omdat de doelcomputer dit actief weigerde