sql >> Databasteknik >  >> RDS >> Mysql

Ändra bord utan att låsa hela bordet

Kort svar:För MySQL krävs <5.6 lås. Från och med 5.6 och med InnoDB, låser krävs inte för många ALTER TABLE operationer inklusive att lägga till en kolumn .

Om du använder MySQL 5.5 eller äldre kommer den att få ett läslås för hela operationen och sedan ett kort skrivlås i slutet.

Från MySQL-dokumentationen för ALTER TABLE ...

Det vill säga, när du lägger till en kolumn låser den tabellen under större delen av operationen och får sedan ett skrivlås i slutet.

MySQL 5.6 lade till Online DDL till InnoDB som snabbar upp och förbättrar många saker som att ändra tabeller och index. Att lägga till en kolumn i en tabell kommer inte längre att kräva tabelllås förutom eventuellt korta exklusiva lås i början och slutet av operationen .

Det bör ske automatiskt, men för att vara säker ställ in ALGORITHM=inplace och LOCK=none till din ALTER TABLE uttalande.

Det finns ett undantag...




  1. Letar du efter en enkel fulltextsökning? Prova MySQL InnoDB + CakePHP med Word Stemming

  2. Importera data till en MySQL-databas

  3. Vänta händelse:ändra storlek på asynkron deskriptor

  4. Referensvärde för seriell kolumn i en annan kolumn under samma INSERT