1
votes

DROP CONSTRAINT ne parvient pas à trouver la contrainte

J'essaye de supprimer une contrainte:

MariaDB [(mydb)]> select * from information_schema.table_constraints WHERE table_name = 'mytable';
+--------------------+-------------------+---------------------------------------------------------------+--------------+-----------------+-----------------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME                                               | TABLE_SCHEMA | TABLE_NAME      | CONSTRAINT_TYPE |
+--------------------+-------------------+---------------------------------------------------------------+--------------+-----------------+-----------------+
| def                | mydb              | PRIMARY                                                       | mydb         | mytable         | PRIMARY KEY     |
| def                | mydb              | name                                                          | mydb         | mytable         | UNIQUE          |
| def                | mydb              | myconstraint                                                  | mydb         | mytable         | FOREIGN KEY     |
+--------------------+-------------------+---------------------------------------------------------------+--------------+-----------------+-----------------+

Et elle répond par:

ERROR 1091 (42000) at line 6: Can't DROP CONSTRAINT `myconstraint`; check that it exists

Mais la contrainte existe:

USE `mydb`;

BEGIN;
ALTER TABLE `mydb` DROP CONSTRAINT `myconstraint`;
COMMIT;

Qu'est-ce que je fais de mal?


3 Réponses :


1
votes

Je pense que vous confondez "schéma" (alias "base de données") et "table"): ALTER TABLE ma table ...


3 commentaires

Ma contrainte est sur une table. Je peux trouver la contrainte, mais je ne peux pas la laisser tomber.


Essayez USE mydb; ALTER TABLE mytable DROP CONSTRAINT myconstraint;


C'est ce que j'ai dans ma question et ne fonctionne pas. Voir ma réponse pour la solution



2
votes

Le problème est que MariaDB (MySql?) ne permet pas de supprimer les contraintes de clé étrangère avec la syntaxe DROP CONSTRAINT . Il doit être déposé comme ceci:

ALTER TABLE `mytable` DROP FOREIGN KEY `myconstraint`;


0 commentaires

0
votes

Ce problème est documenté dans https://jira.mariadb.org/browse/MDEV- 17599 . Il a été corrigé dans les versions 10.2.22 et 10.3.13 (11-02-2019). Je suggère de mettre à jour la version MariaDB ou, comme @volingas l'a écrit, le sintax:

ALTER TABLE `mytable` DROP FOREIGN KEY `myconstraint`;


0 commentaires