본문 바로가기
MySql

MySQL 중복 외래 키 제약

by 베이스 공부 2020. 11. 1.
반응형

데이터베이스를 가져 오려고하면이 오류가 발생합니다.

SQL query:
ALTER TABLE `bid`
ADD CONSTRAINT `bid_ibfk_4` FOREIGN KEY (`auction_contact_id`) REFERENCES `auction_contact` (`auction_contact_id`),
ADD CONSTRAINT `bid_ibfk_3` FOREIGN KEY (`car_id`) REFERENCES `car` (`car_id`)

MySQL said: Documentation
#1826 - Duplicate foreign key constraint name 'projekt_classics/bid_ibfk_3'

모든 외래 키를 보면 결과적으로 얻습니다.

select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE = 'FOREIGN KEY' 

결과

def     projekt_classics    bid_ibfk_2      projekt_classics    bid     FOREIGN KEY
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

SQL에서 bid_ibfk_3 제약 조건을 검색하면 1 회만 표시됩니다. 모든 데이터는 가져온 데이터베이스에 있지만이 오류를 피할 수있는 방법이 궁금합니다.

수정 : First dropping all the tables runs the query without problems. I export my database using PHPmyadmin. 오류가 다시 생성하기 전에 아직 삭제되지 않은 외래 키 제약 때문이라고 생각합니다.

 

해결 방법

 

쿼리 결과를 보면 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

 

참조 페이지 https://stackoverflow.com/questions/39501899

 

 

반응형

댓글