Mysql
 sql >> Database >  >> RDS >> Mysql

Modificare il tavolo senza bloccare l'intero tavolo

Risposta breve:per MySQL <5.6 sono necessari blocchi. A partire dalla 5.6 e utilizzando InnoDB, si blocca non sono richiesti per molti ALTER TABLE operazioni inclusa l'aggiunta di una colonna .

Se stai usando MySQL 5.5 o versioni precedenti, otterrà un blocco di lettura per l'intera operazione e quindi un breve blocco di scrittura alla fine.

Dalla documentazione MySQL per ALTER TABLE ...

Vale a dire, quando si aggiunge una colonna, la lettura blocca la tabella per la maggior parte dell'operazione, quindi ottiene un blocco di scrittura alla fine.

MySQL 5.6 ha aggiunto il DDL online a InnoDB che velocizza e migliora molte cose come l'alterazione di tabelle e indici. L'aggiunta di una colonna a una tabella non richiede più i blocchi di tabella salvo eventuali brevi blocchi esclusivi all'inizio e alla fine dell'operazione .

dovrebbe avviene automaticamente, ma per sicurezza imposta ALGORITHM=inplace e LOCK=none al tuo ALTER TABLE dichiarazione.

C'è un'eccezione...