2015-10-16 3 views
0

Операция USE USS не работает должным образом.Оператор MySQL USE не действует

Я использую MySQL -e команды конкатенировать USE и SELECT:

У меня есть MySQL-сервер, работающий с

шоу баз данных;

Результат: тестирование

Testing содержит Match.

Тогда я выполняю этот Баш:

MYSQL_RESULT=`mysql -h $DBIP -u testuser -ptestuser $DBSCHEMA -e "USE $DBSCHEMA; $SQL"` 

с $DBSCHEMA = testing и $ SQL является простым "выберите * от матча;"

** Проблема: **

Предупреждение: Использование пароля на интерфейсе командной строки может быть небезопасно.

ОШИБКА 1064 (42000) в строке 1: У вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «Матч» по строке 1

Не найдено Матч, хотя он определенно является частью тестирования. выберите * из test.Match работает (с и без USE заранее)

Является ли мой синтаксис неправильным?

Server version: 5.5.43-0+deb7u1 (Debian) 

ответ

0

Я думаю, что проблема в том, что матч также ключевое слово в MySQL, она используется для выполнения полнотекстового serches (матч ... против ...). Когда вы используете форму test.match, mysql может четко решить, что вы ссылаетесь на таблицу соответствия в тестовой базе данных. Без тестирования. part, mysql считает, что вы хотите выполнить полнотекстовый поиск.

Решения:

  1. Изменение имени таблицы, так что это не зарезервированное слово в MySQL.
  2. Используйте формат dbname.tablename.
  3. Инкапсулируйте спичку слова в обратных кавычках (`)
1

Вам не нужно USE $DBSCHEMA;, потому что ваш Баш скрипт уже $ DBSCHEMA в нем mysql -h $DBIP -u testuser -ptestuser $DBSCHEMA -e

Реальная проблема, хотя, потому что матч является зарезервированным словом , Замените запрос на

ВЫБЕРИТЕ ИЗМЕРЕНИЕ ОТ match

Смежные вопросы