Преобразуйте операторы обновления MySQL в операторы вставки - PullRequest
1 голос
/ 01 марта 2011

У меня есть дамп объемом 11 МБ, содержащий инструкции UPDATE, отформатированные так:

UPDATE `table` SET `id` = 1,`field`='etc' WHERE `table`.`id` = 1;

Однако мне нужно вставить эти значения в новую базу данных, используя операторы, подобные этому:

INSERT INTO `table` (`id`, `field`) VALUES ('etc', 1);

Кто-нибудь написал инструмент или службу для преобразования UPDATE операторов в INSERT операторов?(На первый взгляд кажется, что это просто недостижимо для регулярных выражений)

Ответы [ 3 ]

2 голосов
/ 01 марта 2011

Ленивый подход.Если у вас есть идентификаторы, вставьте их независимо от того, для чего они нужны, и после этого запустите обновления.

0 голосов
/ 30 октября 2014

Этот простой поиск и замена регулярных выражений в блокноте ++ преобразует любое обновление во вставку:

Search for: UPDATE (.*) SET (.*) WHERE .*$
Replace with: INSERT INTO \1 SET \2;

Это предполагает, что то, что следовало за «где», изначально было уникальным ключом. Это меняет его так, что ключ будет автоматически увеличиваться при вставке.

0 голосов
/ 01 марта 2011

Ничто не может быть недоступно регулярному выражению.Для каждой строки в дампе используйте следующее:

Pattern :       ^.*`id` = (\d+).*`field`='(.*)'[^']*WHERE.*$
Replacement :   INSERT INTO `table` (`id`, `field`) VALUES ('$2', $1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...