Mysql
 sql >> база данни >  >> RDS >> Mysql

Ограничение за дублиран външен ключ на Mysql

Ако погледнете резултата от вашата заявка, външният ключ bid_ibfk_3 вече съществува . Всъщност е във втория ред на резултата.

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

Ето защо получавате дублираното име на ограничение за външен ключ, когато се опитвате да изпълните това:

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

Можете да промените вашата заявка, за да проверите първо дали чуждият ключ, който се опитвате да създадете, не съществува, преди действително да го създадете.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Deadlock Detection чрез PHP

  2. SendGrid за PHP е бавен. Възможни ли са заявки без блокиране?

  3. SQL да извлича само някои редове?

  4. Как да преведем PostgreSQL merge_db (известна още като upsert) функция в MySQL

  5. Показване на данни от MYSQL; Грешка в SQL израза