sql >> Database >  >> RDS >> Mysql

Laat externe sleutel alleen vallen als deze bestaat

Als u een externe sleutel wilt laten vallen als deze bestaat en geen procedures wilt gebruiken je kunt het op deze manier doen (voor 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;

Als er een externe sleutel is, plaatsen we de instructie alter table in de variabele en als die er niet is, plaatsen we een dummy-instructie. En dan voeren we het uit.



  1. Asynchrone replicatie instellen tussen MySQL Galera-clusters

  2. Rails selecteren willekeurig record

  3. PostgreSQL geparametriseerde Order By / Limit in tabelfunctie

  4. Hoe parallelle plannen opstarten - deel 2