Após renomear algumas tabelas, recebo o seguinte erro:
MariaDB [testdb]> INSERT INTO user_events (date, uid, operation, info) VALUES('2022-09-15','xyz','create',NULL);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails `testdb`.`user_events`, CONSTRAINT `user_events_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `associations` (`uid`))
O motivo é que a tabela associations
em REFERENCES
precisa ser alterada para users
.
Qual é a maneira mais fácil de conseguir isso?
Você pode seguir um processo de três etapas.
1. Identify the foreign keys names from the tables
No seu exemplo
show create table user_events
daria o nome da chave estrangeira.Você pode encontrar todos os nomes de chaves estrangeiras para um esquema usando a consulta abaixo:
2. Drop the foreign key constraint
Se o seu mecanismo de tabelas for Innodb , use a seguinte consulta para descartar a chave estrangeira:
3. Recreate the foreign key constraint
Nota . As etapas 2 e 3 podem ser combinadas em uma consulta, mas o nome da chave estrangeira deve ser diferente do descartado
Resposta ao comentário de Rick
Dos documentos Limitações de DDL online
O erro enfrentado sem travar a tabela (nem sempre) , na maioria das vezes acontece em tabelas grandes o que resultará na falha do comando alter :
Para evitar isso, use a sintaxe de bloqueio adequada conforme descrito acima