sql >> Database >  >> RDS >> Mysql

TAFEL WIJZIGEN zonder de tafel te vergrendelen?

De enige andere optie is om handmatig te doen wat veel RDBMS-systemen toch doen...
- Een nieuwe tabel maken

U kunt dan de inhoud van de oude tabel over een stuk tegelijk kopiëren. Terwijl u altijd voorzichtig bent met INSERT/UPDATE/DELETE op de brontabel. (Kan worden beheerd door een trigger. Hoewel dit een vertraging zou veroorzaken, is het geen slot...)

Als u klaar bent, wijzigt u de naam van de brontabel en wijzigt u vervolgens de naam van de nieuwe tabel. Bij voorkeur in een transactie.

Als u klaar bent, compileert u alle opgeslagen procedures enz. opnieuw die die tabel gebruiken. De uitvoeringsplannen zullen waarschijnlijk niet langer geldig zijn.

BEWERKEN:

Er zijn enkele opmerkingen gemaakt dat deze beperking een beetje mager is. Dus ik dacht:laat ik er een nieuw perspectief op plaatsen om te laten zien waarom het is zoals het is...

  • Het toevoegen van een nieuw veld is als het wijzigen van één veld op elke rij.
  • Veldsloten zouden veel moeilijker zijn dan rijsloten, laat staan ​​tafelsloten.

  • Je verandert eigenlijk de fysieke structuur op de schijf, elk record beweegt.
  • Dit is echt een UPDATE voor de hele tafel, maar met meer impact...


  1. Dumpbestand MySQL 5.6.10

  2. #1136 - Kolomtelling komt niet overeen met waardetelling?

  3. Hoe TIMESTAMPDIFF() werkt in MariaDB

  4. MySQL voorwaardelijke ORDER BY ASC/DESC voor datumkolom