@MasterCopipaster

Откуда берется /*!40001 SQL_NO_CACHE */ в запросе при создании дампа?

Делаю дамп с выборкой

mysqldump -u root database tables --where \
"SELECT * from tables where article = '263203A001' or article = 'OP570' or article = 'OC90'" \
> dump.sql

Получаю ошибку:
mysqldump: Couldn't execute 'SELECT /*!40001 SQL_NO_CACHE */ * FROM `tables` WHERE SELECT * from tables where article = '263203A001' or article = 'OP570' or article = 'OC90'':
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * from tables where article = '263203A001' or article = 'OP570' or artic' at line 1 (1064)


Че за?! - *-* Откуда это берется вообще? /*!40001 SQL_NO_CACHE */ и как это убрать?
  • Вопрос задан
  • 695 просмотров
Решения вопроса 2
@Akina
Сетевой и системный админ, SQL-программист.
Отвечу всё же на заданный вопрос:
Откуда это берется вообще? /*!40001 SQL_NO_CACHE */ и как это убрать?

Это - комментарий с фрагментом запроса, специфичным для MySQL.

Помещается в тело запроса (в т.ч. в дамп) для того, чтобы запрос, использующий какую-либо специфичную для MySQL конструкцию, мог быть выполнен в другом SQL-диалекте без внесения изменений в текст запроса. Т.е. MySQL обрабатывает содержимое такого комментария так, словно этот фрагмент не закомментирован, тогда как другие СУБД проигнорируют этот фрагмент как комментарий.

Опциональное пятизначное число указывает минимальную версию MySQL, начиная с которой содержимое комментария должно обрабатываться (в показанном фрагменте - это версия 4.00.01), на более младшей версии комментарий останется комментарием. При его отсутствии (используется только /*!) - код из комментария обрабатывается любой версией.

Убрать - в случае дампа никак. Да и не нужно это - эти комментарии специально добавляются для того, чтобы можно было корректно развернуть дамп на более младшей версии MySQL. Впрочем, далеко не все специфичные конструкции так комментируются - скажем, если в теле хранимой процедуры имеется обращение к функции, отсутствующей в младшей версии, то это обращение не комментируется и при разворачивании на младшей версии приведёт к ошибке. Но тут уж, как говорится, на каждый чих не наздравствуешься...
Ответ написан
Комментировать
karabanov
@karabanov
Системный администратор
man mysqldump

--where='where_condition', -w 'where_condition'

Dump only rows selected by the given WHERE condition.
Quotes around the condition are mandatory if it contains spaces or other characters that are special to your command interpreter.

А ты в WHERE подставил SELECT
mysqldump -u root database table \
--where "article='263203A001' or article='OP570' or article='OC90'" \
> dump.sql
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы