Если ваша единственная актуальная проблема сейчас заключается в постоянном воссоздании внешнего ключа (кроме, возможно, сбойной установки MySQL с учетом других проблем), почему бы не:
1) присвоить ему символ ограничения (должен быть уникальным вбазы данных), и пусть добавление завершится неудачно / поймать их?
ALTER TABLE tbl ADD CONSTRAINT only_one_please FOREIGN KEY (columnname) ...
2) или, что еще лучше, добавьте предложение внешнего ключа в ваш create table
в первую очередь?
Что касается исходного вопроса: я не знаю причин, почему это должно происходитьи я не могу его воссоздать.Выбор из information_schema является довольно предпочтительным способом проверки этого, и он еще не подвел меня.Помимо проверки методом "грубой силы", такой как SELECT * FROM tablename LIMIT 0;
и проверки на наличие ошибок, вы, возможно, сначала захотите проверить любые другие механизмы кэширования, кроме кэша запросов MySQL, и, если их нет / не проблема, возможно, попробуйте SELECT SQL_NO_CACHE table_schema, table_name FROM information_schema.tables
.