sql >> Database >  >> RDS >> Mysql

Mysql dubbele externe sleutel beperking

Als u naar het resultaat van uw zoekopdracht kijkt, wordt de refererende sleutel bid_ibfk_3 bestaat al . In feite staat het in de tweede rij van het resultaat.

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

Daarom krijgt u de dubbele naam van de refererende sleutelbeperking wanneer u dit probeert uit te voeren:

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

U kunt uw zoekopdracht aanpassen om eerst te controleren of de externe sleutel die u probeert te maken niet bestaat, voordat u deze daadwerkelijk maakt.

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



  1. Hoe verschilt het gebruik van OR in een MySQL-statement precies met/zonder haakjes?

  2. Inleiding tot speciale zoekopdrachten

  3. Krijg alle POST-gegevens en stuur een e-mail

  4. Precisie van interval voor PL/SQL-functiewaarde