Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

ALTER TABLE sem travar a tabela?


A única outra opção é fazer manualmente o que muitos sistemas RDBMS fazem...
- Criar uma nova tabela

Você pode então copiar o conteúdo da tabela antiga em um pedaço de cada vez. Sempre tomando cuidado com qualquer INSERT/UPDATE/DELETE na tabela de origem. (Pode ser gerenciado por um gatilho. Embora isso cause uma lentidão, não é um bloqueio...)

Quando terminar, altere o nome da tabela de origem e, em seguida, altere o nome da nova tabela. De preferência em uma transação.

Uma vez terminado, recompile quaisquer procedimentos armazenados, etc. que usem essa tabela. Os planos de execução provavelmente não serão mais válidos.

EDITAR:

Alguns comentários foram feitos sobre esta limitação ser um pouco pobre. Então eu pensei em colocar uma nova perspectiva sobre isso para mostrar por que é como é...
  • Adicionar um novo campo é como alterar um campo em cada linha.
  • Os bloqueios de campo seriam muito mais difíceis do que os bloqueios de linha, não importa os bloqueios de tabela.

  • Na verdade, você está alterando a estrutura física do disco, cada registro se move.
  • Isso realmente é como uma ATUALIZAÇÃO na mesa inteira, mas com mais impacto...