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

ÆNDRE TABEL uden at låse bordet?

Den eneste anden mulighed er at gøre manuelt, hvad mange RDBMS-systemer gør alligevel...
- Opret en ny tabel

Du kan derefter kopiere indholdet af den gamle tabel over et stykke ad gangen. Mens du altid er forsigtig med INSERT/UPDATE/DELETE på kildetabellen. (Kunne styres af en trigger. Selvom dette ville forårsage en opbremsning, er det ikke en lås...)

Når du er færdig, skal du ændre navnet på kildetabellen og derefter ændre navnet på den nye tabel. Helst i en transaktion.

Når du er færdig, skal du genkompilere alle lagrede procedurer osv., der bruger den tabel. Udførelsesplanerne vil sandsynligvis ikke længere være gyldige.

EDIT:

Nogle kommentarer er blevet fremsat om, at denne begrænsning er lidt dårlig. Så jeg tænkte, at jeg ville sætte et nyt perspektiv på det for at vise, hvorfor det er, som det er...

  • At tilføje et nyt felt er som at ændre et felt på hver række.
  • Feltlåse ville være meget sværere end rækkelåse, pyt med bordlåse.

  • Du ændrer faktisk den fysiske struktur på disken, hver post flyttes.
  • Dette er virkelig som en OPDATERING på hele tabellen, men med mere effekt...


  1. Slet fra én tabel med join

  2. Hvordan rettes fejl i pg_dump-versionen?

  3. Hvordan YEAR() virker i MariaDB

  4. Vigtigheden af ​​godt databasedesign (og 7 trin til at opnå det)