mysqldump с предложением where, использующим ссылочную целостность - PullRequest
1 голос
/ 13 января 2011

Я знаю, что могу вывести одну таблицу, используя предложение "where", но мне было интересно, можно ли вывести таблицу и получить все связывающие записи вместе с ними, если они принадлежат определенному идентификатору учетной записи?

Все мои таблицы innodb и были настроены с использованием ограничений внешнего ключа с каскадным удалением.Если я удалю основную таблицу «account», где account_id = 1, то все записи, которые ссылаются на account_id, равный «1», также будут удалены.

Так что мне нужно нечто похожее по концепции.Я хочу сбросить все данные для "Account_id = 1" во всех таблицах, которые ссылаются на таблицу "account" в одной команде.Если я выполню следующую команду, я считаю, что она будет выводить только одну таблицу:

mysqldump -t -u [username] -p test account --where="account_id = 1"

Есть ли другой способ создать дамп таблицы с предложением where и автоматически сбросить данные по своему вкусутаблицы без необходимости писать отдельные команды дампа для каждой таблицы?в конечном итоге я хочу получить файл .sql для каждой учетной записи, такой как «account_1.sql», account_2.sql и т. д.

1 Ответ

0 голосов
/ 10 июня 2011

Я поместил этот вопрос в свой любимый список, чтобы посмотреть, придет ли кто-нибудь с идеей, и, как я и ожидал, никто не сделал.

Один довольно забавный способ - клонировать БД, удалить все необязательные идентификаторы учетных записей (удаление будет каскадным для всех таблиц), а затем сбросить оставшиеся (которые будут всеми необходимыми идентификаторами учетных записей).

Я проходил через ту же проблему с MySQL и DBIx :: Class (ORM в Perl). Я хотел клонировать тысячу аккаунтов (с запутанными именами и электронными письмами). В итоге я написал сценарий для обхода всей базы данных через внешние ключи данного идентификатора пользователя и генерации всех необходимых операторов вставки в правильном порядке.

...