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

Alterar mesa sem travar a mesa inteira


Resposta curta:Para MySQL <5.6, os bloqueios são necessários. A partir do 5.6, e usando o InnoDB, locks não são necessários para muitos ALTER TABLE operações incluindo adicionar uma coluna .

Se você estiver usando o MySQL 5.5 ou anterior, ele obterá um bloqueio de leitura para toda a operação e, em seguida, um breve bloqueio de gravação no final.

Da documentação do MySQL para ALTER TABLE ...

Ou seja, ao adicionar uma coluna, ela bloqueia a tabela durante a maior parte da operação e, em seguida, obtém um bloqueio de gravação no final.

O MySQL 5.6 adicionou o DDL online para InnoDB que acelera e melhora muitas coisas, como alterar tabelas e índices. Adicionar uma coluna a uma tabela não exigirá mais bloqueios de tabela exceto possivelmente breves bloqueios exclusivos no início e no final da operação .

Ele deve acontece automaticamente, mas para ter certeza defina ALGORITHM=inplace e LOCK=none para o seu ALTER TABLE demonstração.

Há uma exceção...