Как я могу определить, существует ли таблица? MySql - PullRequest
2 голосов
/ 13 июля 2010

Мне предложили сделать это

SELECT table_schema, table_name FROM information_schema.tables
WHERE table_schema = 'mydb' AND table_name='ApprovePost';

Однако это ненадежно и вызывает ошибки в нескольких версиях mysql для Windows и Linux .

Может быть, есть другой способ. Кто-нибудь знает?

Эта проблема в том, что я могу создать таблицу, если она не существует, но я делаю второй проход, чтобы добавить ограничение FK. В моем дампе SQL я вижу> 130 содержится в одной таблице. В таблице всего 6 столбцов, только два из них нуждаются в ограничениях. Ограничения продолжают создаваться и создаваться каждый раз, когда я перезагружаю сервер Apache или всякий раз, когда mono чувствует необходимость вызова моего глобального метода init в моем веб-приложении.

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

Похоже, вам нужно использовать команду FLUSH TABLES для INFORMATION_SCHEMA.TABLES для отображения существующих таблиц.

Ссылка:

0 голосов
/ 13 июля 2010

Если ваша единственная актуальная проблема сейчас заключается в постоянном воссоздании внешнего ключа (кроме, возможно, сбойной установки 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...