Maison >base de données >tutoriel mysql >Comment puis-je effectuer une opération MySQL « ALTER TABLE » sans verrouiller la table et interrompre les mises à jour simultanées ?

Comment puis-je effectuer une opération MySQL « ALTER TABLE » sans verrouiller la table et interrompre les mises à jour simultanées ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-17 09:22:25317parcourir

How Can I Perform a MySQL `ALTER TABLE` Operation Without Locking the Table and Disrupting Concurrent Updates?

ALTER TABLE sans verrouiller la table

Lors de l'exécution d'une opération ALTER TABLE dans MySQL, la table est verrouillée en lecture pendant la durée du instruction, bloquant potentiellement les écritures simultanées. Si cette opération est effectuée sur une table volumineuse, les instructions INSERT ou UPDATE pourraient être interrompues pendant une période prolongée. Existe-t-il une solution pour effectuer une « modification à chaud » sans affecter les mises à jour en cours ?

La seule alternative : la manipulation manuelle

Bien que MySQL ne prenne pas en charge directement les modifications à chaud, un Il existe une alternative : répliquer manuellement les fonctionnalités que de nombreux systèmes SGBDR exécutent automatiquement. Cela implique :

  1. Créer une nouvelle table : Créer une table vide avec la structure de colonnes souhaitée.
  2. Copier les données : Transférer le les données de l'ancienne table vers la nouvelle table progressivement, tout en surveillant toutes les opérations simultanées sur la table d'origine.
  3. Renommer Tables :Une fois la migration des données terminée, renommez la table source et la nouvelle table, idéalement au sein d'une transaction.
  4. Recompilation des objets : Mettez à jour toutes les procédures stockées ou autres objets faisant référence le tableau, car les plans d'exécution devront être ajustés en raison des changements structurels.

Technique Considérations :

L'ajout d'un nouveau champ modifie efficacement chaque ligne du tableau. Ce processus nécessite une restructuration physique des données sur le disque, semblable à une opération de MISE À JOUR étendue avec un impact plus important. Le verrouillage au niveau du champ serait plus complexe que le verrouillage au niveau des lignes, et les verrous à l'échelle de la table ne sont pas toujours souhaitables.

Autres solutions SGBDR :

Bien que MySQL ne le soit pas prennent en charge les modifications à chaud de manière native, d'autres systèmes SGBDR peuvent offrir une telle fonctionnalité. Par exemple, PostgreSQL autorise les tables partitionnées, qui peuvent être modifiées individuellement sans affecter les autres partitions.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn