Mysql
 sql >> Base de données >  >> RDS >> Mysql

Supprimer la clé étrangère uniquement si elle existe

Si vous souhaitez supprimer la clé étrangère si elle existe et ne souhaitez pas utiliser de procédures vous pouvez le faire de cette façon (pour MySQL) :

set @var=if((SELECT true FROM information_schema.TABLE_CONSTRAINTS WHERE
            CONSTRAINT_SCHEMA = DATABASE() AND
            TABLE_NAME        = 'table_name' AND
            CONSTRAINT_NAME   = 'fk_name' AND
            CONSTRAINT_TYPE   = 'FOREIGN KEY') = true,'ALTER TABLE table_name
            drop foreign key fk_name','select 1');

prepare stmt from @var;
execute stmt;
deallocate prepare stmt;

S'il y a une clé étrangère, nous mettons l'instruction alter table dans la variable et s'il n'y en a pas, nous mettons une instruction factice. Et puis nous l'exécutons.