Sign up ×
Database Administrators Stack Exchange is a question and answer site for database professionals who wish to improve their database skills and learn from others in the community. It's 100% free, no registration required.

If I create a foreign key constraint for table 'photos' in phpmyadmin, I later see that the constraint is named 'photos_ibfk_1', and the next constraint is called 'photos_ibfk_2', etc. From this I have gathered that [tablename]_ibfk_constraintIndex is the convention for DB constraints in MySQL. Is this correct? What does IBFK stand for?

share|improve this question

2 Answers 2

up vote 12 down vote accepted

innodb foreign key. It's just short hand naming convention. You could call it asdfqwerty and the name would still work.

share|improve this answer

Although foreign key names can be anything, it's actually a good practice to follow the convention of putting the table name first.

The most important reason for this is that foreign key names must be globally unique (contrarily to index names). So, by following this convention, foreign key names only have to be unique within each table.

Personally, I use the convention [table_name]_fk_[field_name].

In order to name your foreign keys, you will have to explicitly spell out the constraint on the table, instead of just the foreign key.

Simple method (automatic naming, will result in [table_name]_ibfk_[index]): ALTER TABLE `[table_name]` ADD FOREIGN KEY (`[field_name]`) REFERENCES `[foreign_table_name]`(`[foreign_field_name]`);

Explicit method (will result in [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]`);

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.