Mysql
 sql >> Base de données >  >> RDS >> Mysql

ALTER TABLE sans verrouiller la table ?

La seule autre option est de faire manuellement ce que de nombreux systèmes RDBMS font de toute façon...
- Créer une nouvelle table

Vous pouvez ensuite copier le contenu de l'ancienne table sur un morceau à la fois. Tout en faisant toujours attention à tout INSERT/UPDATE/DELETE sur la table source. (Pourrait être géré par un déclencheur. Bien que cela causerait un ralentissement, ce n'est pas un verrou...)

Une fois terminé, changez le nom de la table source, puis changez le nom de la nouvelle table. De préférence dans une transaction.

Une fois terminé, recompilez toutes les procédures stockées, etc. qui utilisent cette table. Les plans d'exécution ne seront probablement plus valides.

MODIF :

Certains commentaires ont été faits sur cette limitation étant un peu pauvre. Alors j'ai pensé que je mettrais une nouvelle perspective là-dessus pour montrer pourquoi c'est comme ça...

  • Ajouter un nouveau champ revient à modifier un champ sur chaque ligne.
  • Les verrous de champ seraient beaucoup plus difficiles que les verrous de ligne, sans parler des verrous de table.

  • Vous modifiez en fait la structure physique sur le disque, chaque enregistrement bouge.
  • C'est vraiment comme une mise à jour sur toute la table, mais avec plus d'impact...