Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Einschränkung für doppelte MySQL-Fremdschlüssel

Wenn Sie sich das Ergebnis Ihrer Abfrage ansehen, ist der Fremdschlüssel bid_ibfk_3 gibt es bereits . Tatsächlich steht es in der zweiten Zeile des Ergebnisses.

def     projekt_classics    bid_ibfk_2      projekt_classics    bid     FOREIGN KEY
--the row below is the foreign key that you are trying to create
def     projekt_classics    bid_ibfk_3      projekt_classics    bid     FOREIGN KEY
def     projekt_classics    car_ibfk_1      projekt_classics    car     FOREIGN KEY
def     projekt_classics    car_ibfk_3      projekt_classics    car     FOREIGN KEY
def     projekt_classics    car_ibfk_4      projekt_classics    car     FOREIGN KEY
def     projekt_classics    car_brand_ibfk_1    projekt_classics    car_brand   FOREIGN KEY

Aus diesem Grund erhalten Sie den doppelten Namen der Fremdschlüsselbeschränkung, wenn Sie versuchen, Folgendes auszuführen:

ADD CONSTRAINT `bid_ibfk_3` FOREIGN KEY (`car_id`) REFERENCES `car` (`car_id`)

Sie können Ihre Abfrage ändern, um zuerst zu prüfen, ob der Fremdschlüssel, den Sie zu erstellen versuchen, nicht existiert, bevor Sie ihn tatsächlich erstellen.

IF NOT EXISTS (SELECT NULL FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
                   WHERE CONSTRAINT_SCHEMA = DATABASE()
                         AND CONSTRAINT_TYPE = 'FOREIGN KEY'
                         AND CONSTRAINT_NAME = 'bid_ibfk_3') THEN
   ALTER TABLE `bid` ADD CONSTRAINT `bid_ibfk_3`
        FOREIGN KEY (`car_id`) REFERENCES `car` (`car_id`);
END IF