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)...外部キーのInnoDB
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
制約名はサーバー全体でグローバルに一意ではなく、データベースにのみ一意です。同じサーバー上の2つの異なるデータベースで同じ制約名を再利用できます。
ブランドン

@ブランドン:良いキャッチ!編集します。👍
マルコ・ロイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.