MySql 'CREATE DATABASE IF ЕСЛИ НЕ СУЩЕСТВУЕТ', когда база данных имеет живые соединения - PullRequest
0 голосов
/ 29 мая 2011

У нас есть некоторый код инициализации, который гарантирует, что все необходимые ресурсы на месте,
, т. Е. Создает эти ресурсы (файлы, каталоги, базы данных, таблицы и т. Д.), Если они отсутствуют, и ничего не делает иначе.

Но, когда база данных используется (то есть существует и уже имеет действующие соединения), новое приложение, которое проходит через код инициализации, ждет вечно.

Причина в том, что «СОЗДАТЬ БАЗУ ДАННЫХ ЕСЛИ НЕ СУЩЕСТВУЕТ» довольно глупо: она пытается владеть базой данных, даже если она существует и ничего не должно быть сделано.

Есть ли способ проверить, существует ли база данных, которая не включает такую ​​блокировку?

Ответы [ 3 ]

1 голос
/ 29 мая 2011
SELECT EXISTS(
    SELECT 1
    FROM INFORMATION_SCHEMA.SCHEMATA
    WHERE SCHEMA_NAME = 'MyDatabaseName'
) AS e

Возвращает 1, если база данных существует (и пользователь, выполняющий запрос, имеет соответствующие привилегии для его просмотра, бла-бла-бла); 0 в противном случае

0 голосов
/ 30 мая 2011

Ты уверен? У вас есть контрольный пример с воспроизводимой ошибкой? Если это так, пожалуйста, сообщите об этом как об ошибке.

Я, конечно, не вижу такого поведения, как описано.

0 голосов
/ 29 мая 2011

Просто предположите, что это так. Если этого не произойдет, ваша система ужасно сломана. Он будет обнаружен ошибками SQL при попытке выполнить запросы.

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