Различные предложения WHERE в зависимости от схемы таблицы

0

Я пытаюсь сделать дамп mysql для базы данных с помощью инструмента командной строки "mysqldump", и я хочу сделать что-то уникальное. По существу, если таблица содержит определенный столбец, дамп в соответствии с этими ограничениями, в противном случае выгрузите всю таблицу. Но из-за характера параметров командной строки mysqldump это все должно быть в одном предложении WHERE.

В коде psuedo это то, что я должен сделать:

if table.columns contains "user_id":
    where = "user_id=1" // dump rows where user_id=1
else:
    where = "TRUE" // dump whole table

Но во всех случаях where, которые будут применяться к каждой таблице, mysqldump встречается

Теги:
where

1 ответ

0

Параметр --where для mysqldump может использоваться для передачи выражения SELECT для каждой таблицы, но он передает одно и то же выражение для всех таблиц.

Если вам нужно использовать разные предложения WHERE для разных подмножеств таблиц, вам нужно будет выполнить более одной команды mysqldump и выполнить каждую команду с помощью другого набора таблиц


Ваш комментарий:

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

Чтобы сделать то, что вы описываете, вам нужно будет запросить информацию INFORMATION_SCHEMA, чтобы узнать, какие столбцы существуют в таблице, а затем отформатировать SQL-запрос для дампа условно, на основе найденных столбцов, существующих в таблице.

Но в mysqldump у вас нет возможности сделать это. Он должен быть реализован в коде для mysqldump.

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

  • 0
    Хорошо, я понимаю это. Мой вопрос: возможно ли спроектировать предложение WHERE таким образом, чтобы оно могло применяться к любой таблице, с которой оно встречается?
  • 0
    Это действительно так. Спасибо, Билл!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню