#mysql #database #locking
#mysql #База данных #блокировка
Вопрос:
У нас есть некоторый код инициализации, который гарантирует, что все необходимые ресурсы на месте,
то есть: создает эти ресурсы (файлы, каталоги, базы данных, таблицы и т.д.), Если они отсутствуют, и ничего не делает в противном случае.
Но, когда база данных используется (т. Е. существует и уже имеет оперативные соединения), новое приложение, которое проходит через код инициализации, ожидает вечно.
Причина в том, что ‘CREATE DATABASE IF NOT EXISTS’ довольно глупо: он пытается владеть базой данных, хотя она существует и ничего не должно быть сделано.
Есть ли способ проверить, существует ли база данных уже, который не предполагает такой блокировки?
Ответ №1:
SELECT EXISTS(
SELECT 1
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME = 'MyDatabaseName'
) AS e
Возвращает 1, если база данных существует (и пользователь, выполняющий запрос, имеет соответствующие привилегии, чтобы иметь возможность ее видеть, бла-бла-бла); 0 в противном случае
Ответ №2:
Просто предположим, что это так. Если этого не происходит, ваша система ужасно сломана. При попытке выполнения запросов будут обнаружены ошибки SQL.
Ответ №3:
Вы уверены? Есть ли у вас тестовый пример с воспроизводимой ошибкой? Если это так, пожалуйста, сообщите об этом как об ошибке.
Я, конечно, не вижу такого поведения, как описано.
Комментарии:
1. Странно: проблема существует, когда я использую C API (из C code), но не в python (используя MySQLdb).