Что означает «ibfk» в MySQL?


25

Если я создаю ограничение внешнего ключа для таблицы 'photos' в phpmyadmin, я позже вижу, что ограничение называется 'photos_ibfk_1', а следующее ограничение называется 'photos_ibfk_2' и т. Д. Из этого я понял, что [tablename] _ibfk_constraintIndex соглашение для ограничений БД в MySQL. Это верно? Что такое IBFK?


5
ibfk = ih ( I nnoD B ) Fk ( е oreign к еу) ... 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
Имена ограничений не являются глобально уникальными на всем сервере - они уникальны только для базы данных. Вы можете повторно использовать одно и то же имя ограничения в двух разных базах данных на одном сервере.
Брэндон

@ Брендон: Хороший улов! Я отредактирую 👍
Марко Рой
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.