Как исправить ошибку «ERROR 1046 (3D000): No database selected»
Ошибка «ERROR 1046 (3D000): No database selected» (то есть «не выбрана база данных») возникает чаще всего из-за спешки — конечно же, перед выполнением действий с таблицами и хранящейся в них информацией, необходимо указать (то есть выбрать для использования) базу данных. Эта простая ошибка неплохой повод рассказать вам о минимум 5 способах выбрать базу данных — возможно, о каких-то из них вы не знали и в будущем они помогут улучшить вашу продуктивность.
В этой заметке я рассматриваю способы выбрать базы данных при подключении к серверу MySQL и MariaDB с помощью клиента с интерфейсом командной строки. В следующей заметке мы с вами рассмотрим способы выбрать базу данных MySQL и MariaDB в PHP скрипте.
Смотрите также: Ошибка «PHP Fatal error: Uncaught mysqli_sql_exception: No database selected» (РЕШЕНО)
Рассмотрим следующие весьма простые запросы.
Первый запрос выводит данные, хранящиеся в таблице TestTABLE:
SELECT * FROM TestTABLE;
Результатом выполнения запроса является ошибка — база данных не выбрана, то есть СУБД не понимает, для таблицы из какой именно базы данных предназначен предыдущий запрос:
ERROR 1046 (3D000): No database selected
Следующий запрос выводит список таблиц:
SHOW TABLES;
Результат и причина идентичны — не указана база данных для которой предназначен запрос.
ERROR 1046 (3D000): No database selected
1. Выберите базу данных с помощью выражения «USE»
Вы можете указать базу данных для использования с помощью выражения «USE» (замените _DATABASE_NAME_ на имя базы данных):
USE _DATABASE_NAME_;
Например, следующая последовательность запросов уже не вызывает ошибку:
USE TestDB; SELECT * FROM TestTABLE;
Имя выбранной базы данных (то есть базы данных для которой предназначен запрос) обычно указывается в приглашении командной строки (хотя это можно изменить в настройках).
Смотрите также: Как изменить приглашение командной строки для MySQL (MariaDB)
После использования выражения «USE» выводится подтверждение «Database changed», то есть база данных изменена.
Необязательно использовать выражение «USE» перед каждым следующим запросом, поскольку клиент помнит выбранную базу данных в течение текущей сессии:
SHOW TABLES;
Как можно увидеть, запрос успешно выполнен, поскольку база данных выбрана ранее.
Информация о выбранной базе данных сбрасывается если отключиться от сервера MySQL (MariaDB) и подключиться снова.
Для выбора другой базы данных, просто используйте запрос с выражением «USE» ещё раз. Как либо отменять выбор предыдущей базы данных не нужно — это будет сделано автоматически при выборе новой базы данных.
2. Укажите базу данных в запросе
В запросах SELECT и других выражениях в которых используется имя таблицы можно указать «путь» до таблицы в формате «БАЗА ДАННЫХ.ТАБЛИЦА». То есть в начале следует указать имя базы данных, затем точку и затем название таблицы.
Пример запроса, перед которым необязательно использовать выражение «USE» (замените «_DB_» на имя базы данных и «_TestTABLE_» на имя таблицы):
SELECT * FROM _DB_._TestTABLE_;
Пример запроса, который больше не вызывает ошибку:
SELECT * FROM TestDB.TestTABLE;
Этот синтаксис нужно знать, поскольку без него невозможно обойтись в запросах к нескольким таблицам из разных баз данных.
В выражении «SHOW TABLES» также можно указать базу данных и поэтому необязательно предварительно использовать выражение «USE»:
SHOW TABLES FROM TestDB;
3. Укажите базу данных при подключении к серверу MySQL и MariaDB
Выбрать базу данных для использования можно прямо в строке команды для подключения к серверу MySQL и MariaDB (замените «_USERNAME_» на имя пользователя, а «_DB_» на имя базы данных):
mariadb -u _USERNAME_ -p _DB_
Следующая команда выполнит подключение к серверу MariaDB и выберет для использования базу данных «TestDB»:
mariadb -u root TestDB
Этот синтаксис также нужно знать, поскольку он очень полезен при выполнении SQL запросов в неинтерактивном режиме, например, при выполнении запросов из текстового файла. Самый частый пример применения неинтерактивного режима выполнения SQL запросов: импорт таблиц в базу данных.
Если вы выполняете SQL запросы в рамках интерактивной сессии, то вы также можете указывать базу данных при подключении. Впоследствии, если вы захотите переключиться на другую базу данных, вы с лёгкостью сможете это сделать с помощью выражения «USE» - отключаться от сервера необязательно.
4. Укажите базу данных с помощью опции командной строки
Имеется ещё один способ указать базу данных для использования в командной строке, а именно с помощью опции -D (или более длинного варианта --database), синтаксис следующий (замените «_USERNAME_» на имя пользователя, а «_DB_» на имя базы данных):
mariadb -u _USERNAME_ -p -D _DB_ mariadb -u _USERNAME_ -p --database=_DB_
Следующая команда выполнит подключение к серверу MariaDB и выберет для использования базу данных «TestDB»:
mariadb -u root -D TestDB
Между этим вариантом и предыдущим разница в том, что если вы не используете опцию -D (или --database), то имя базы данных должно находиться в самом конце команды. При использовании опции -D, имя базы данных должно следовать за этой опцией, но вместе они могут находиться в любом месте строки команды.
5. Настройка базы данных по умолчанию в конфигурационном файле
Если вы (преимущественно) работаете только с одной базой данных, то вы можете установить базу данных по умолчанию в конфигурационном файле MySQL и MariaDB.
Смотрите также: Как определить расположение и имя конфигурационного файла MySQL (MariaDB). Как узнать название групп для конфигурационных файлов MySQL и MariaDB
При подключении к серверу MySQL и MariaDB вам больше не нужно будет указывать базу данных для использования.
При этом если вы захотите выполнить запрос к другой базе данных, то с помощью выражения «USE» вы можете в любой момент выбрать другую базу данных для использования.
Чтобы добавить настройку с выбором базы данных по умолчанию откройте конфигурационный файл /etc/my.cnf:
sudo gedit /etc/my.cnf
И в группу настроек [client] (если её, то создайте её) добавьте строку (замените TestDB на имя вашей базы данных):
[client] database=TestDB
Сохраните и закройте файл /etc/my.cnf.
Чтобы эта настройка вступила в силу, перезапускать сервер MySQL (MariaDB) не нужно, поскольку это настройка используется клиентом.
Как вы можете видеть на следующем скриншоте, теперь при подключении автоматически выбрана база данных указанная в настройке «database».
Связанные статьи:
- Ошибка при использовании выражений USE в MySQL (MariaDB): «ERROR 1044 (42000): Access denied for user» (РЕШЕНО) (100%)
- Ошибка «PHP Fatal error: Uncaught mysqli_sql_exception: No database selected» (РЕШЕНО) (100%)
- Как разрешить пользователю доступ только к определённым базам данных в MySQL (MariaDB) (98.5%)
- Как разрешить доступ пользователю только к определённым таблицам в MySQL (MariaDB) (98.5%)
- Как разрешить доступ пользователю только к определённым столбцам в MySQL (MariaDB) (98.5%)
- LibreOffice перестала запускаться — как исправить. Сброс настроек LibreOffice без запуска (РЕШЕНО) (RANDOM - 1.5%)