MySQL에서 'ibfk'는 무엇을 의미합니까?


25

phpmyadmin에서 테이블 'photos'에 대한 외래 키 제약 조건을 만들면 나중에 제약 조건의 이름이 'photos_ibfk_1'이고 다음 제약 조건이 'photos_ibfk_2'등이라는 것을 알 수 있습니다. 이로부터 [tablename] _ibfk_constraintIndex는 MySQL의 DB 제약 조건에 대한 규칙. 이 올바른지? IBFK는 무엇을 의미합니까?


5
ibfk = IB ( I nnoD B ) FK ( F oreign K EY) ... 외부 키 이노
WebGuy

답변:


24

innodb 외래 키. 그것은 짧은 손 명명 규칙입니다. asdfqwerty라고 부르면 이름이 계속 작동합니다.


7

외래 키 이름은 무엇이든 될 수 있지만 실제로 테이블 이름을 먼저 지정하는 규칙을 따르는 것이 좋습니다.

가장 중요한 이유는 외래 키 이름 이 데이터베이스 내에서 고유 해야하기 때문입니다 (인덱스 이름과 반대로 각 테이블 내에서만 고유해야 함). 따라서이 규칙에 따라 외래 키 이름은 각 테이블 내에서 고유해야합니다.

개인적으로 나는 협약을 사용합니다 [table_name]_fk_[field_name].

외래 키의 이름을 지정하려면 외래 키 대신 테이블의 제약 조건을 명시 적으로 설명해야합니다.

간단한 방법 (자동 명명, 결과 [table_name]_ibfk_[index]) :

ALTER TABLE `[table_name]`
  ADD FOREIGN KEY (`[field_name]`)
    REFERENCES `[foreign_table_name]`(`[foreign_field_name]`);

명시 적 방법 (결과 [table_name]_fk_[field_name]) :

ALTER TABLE `[table_name]`
  ADD CONSTRAINT `[table_name]_fk_[field_name]`
    FOREIGN KEY (`[field_name]`)
    REFERENCES `[foreign_table_name]`(`[foreign_field_name]`);

1
제약 조건 이름은 전체 서버에서 전역 적으로 고유 하지 않으며 데이터베이스에만 고유합니다. 동일한 서버의 서로 다른 두 데이터베이스에서 동일한 제한 조건 이름을 재사용 할 수 있습니다.
브랜든

@Brandon : 잘 잡아요! 편집하겠습니다. 👍
Marco Roy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.