sql >> Databasteknik >  >> RDS >> Mysql

ÄNDRA BORD utan att låsa bordet?

Det enda andra alternativet är att göra manuellt vad många RDBMS-system ändå gör...
- Skapa en ny tabell

Du kan sedan kopiera innehållet i den gamla tabellen över en bit åt gången. Samtidigt som du alltid är försiktig med INSERT/UPDATE/DELETE på källtabellen. (Kan hanteras av en utlösare. Även om detta skulle orsaka en nedgång, är det inte ett lås...)

När du är klar ändrar du namnet på källtabellen och ändrar sedan namnet på den nya tabellen. Helst i en transaktion.

När du är klar, kompilera om alla lagrade procedurer etc som använder den tabellen. Utförandeplanerna kommer sannolikt inte längre att vara giltiga.

EDIT:

Vissa kommentarer har gjorts om att denna begränsning är lite dålig. Så jag tänkte sätta ett nytt perspektiv på det för att visa varför det är som det är...

  • Att lägga till ett nytt fält är som att ändra ett fält på varje rad.
  • Fältlås skulle vara mycket svårare än radlås, strunt i bordslås.

  • Du ändrar faktiskt den fysiska strukturen på disken, varje post flyttas.
  • Detta är verkligen som en UPPDATERING på hela tabellen, men med större effekt...


  1. skicka parametrar i insert query lagrad procedur i laravel 4

  2. Laravel 5 använder ELLER tillstånd med BETWEEN

  3. Formatera SQL i SQL Server Management Studio

  4. Fånga undantag för insättning av dubbletter av nyckel