J'ai un problème pour supprimer une ligne d'un tableau.
J'utilise ces requêtes pour supprimer d'abord sa clé étrangère, puis supprimer la colonne vers laquelle pointe la clé.
ALTER TABLE resources drop foreign key fk_res_to_addr; ALTER TABLE resources drop column address_id;
Supprimer les contraintes fonctionne très bien. La suppression d'une colonne échoue avec Cannot drop index 'fk_res_to_addr': required in aforeign key constraint
.
J'ai d'abord essayé (et j'essaie toujours) de découvrir ce qui dépend encore de cet index. J'ai utilisé cette requête (trouvée dans cette réponse) :
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = 'some_db' AND REFERENCED_TABLE_NAME = 'resources';
Mais il n’y a rien là-bas.
Ensuite j'ai essayé de désactiver la vérification :
SET FOREIGN_KEY_CHECKS=0;
Bien sûr, puis réactivez-les. Cela n’a également aucun effet.
Puis-je faire autre chose pour comprendre ce qui dépend de cet indice ? Est-ce que j'ai raté quelque chose ?
** EDIT - définition de la table comme demandé ** Il s'agit de la définition actuelle de la table. Comme vous pouvez le voir, address_id possède désormais une clé étrangère, mais l'index est toujours là.
create table resources ( id bigint auto_increment primary key, created bigint not null, lastModified bigint not null, uuid varchar(255) not null, description longtext null, internalName varchar(80) null, publicName varchar(80) not null, origin varchar(80) null, archived bigint unsigned null, contact_id bigint null, colorClass varchar(80) null, address_id bigint null, url mediumtext null, constraint uuid unique (uuid), constraint FK_contact_id foreign key (contact_id) references users (id) ) charset = utf8; create index fk_res_to_addr on resources (address_id); create index idx_resources_archived on resources (archived); create index idx_resources_created on resources (created);
Si vous êtes prêt à essayer
Cela pourrait vous dire si fk_res_to_addr' a réellement été supprimé.
Je n'ai jamais rencontré cela auparavant, mais c'est tellement grave que je soupçonne qu'il pourrait y avoir un bug MySQL. Cela fonctionne "juste" dans mariadb.
Vous devriez voir l'erreur Can't DROP 'fk_res_to_addr' ; Vérifiez si la colonne/clé existe et l'erreur que vous avez signalée - voir https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=c5b0bbc9d6c12f74e00ba8d059a15638
Lors de la création, mysql crée l'index en utilisant le nom que vous avez attribué à fk et attribue son propre nom à fk. Le résultat est l'erreur mentionnée ci-dessus plus https://dbfiddle.uk/?rdbms=mysql_5. 7&fiddle=c5b0bbc9d6c12f74e00ba8d059a15638.
Je vous suggère d'essayer de supprimer la clé, puis la clé étrangère, puis la colonne.