Миграция SQL Server на рефакторинг MySQL с ключом и ограничениями InnoDB - PullRequest
0 голосов
/ 25 июля 2009

Я перерабатываю веб-приложение и его инфраструктуру, изначально используя SQL Server 2005, ASP.NET и Windows 2003, для стека LAMMP (дополнительно M для memcached, конечно), и поскольку схема подвергается сильному рефакторингу (с очень веской причиной для этого)Итак) Я должен написать пользовательское приложение миграции.

Проблема в том, что ограничения первичного + внешнего ключа InnoDB препятствуют моей возможности вставлять данные в его таблицы MySQL / InnoDB. Я уже пытался использовать методы DISABLE KEYS & FOREIGN_KEY_CHECKS и временно удалять автоинкремент на первичном сервере, либо выдавая ошибку, когда пытался сделать одно из этих изменений, например DISABLE KEYS, поскольку он не поддерживается в InnoDB, или пытался удалитьназначение первичного ключа для столбца в пустой таблице или в приложении миграции выдает ошибки, говоря, что ключ уже существует при вводе записи, когда таблица пуста. Есть ли что-нибудь еще, что может быть сделано помимо этого, кроме удаления всех ключей вначале и их последующего возврата (что, я полагаю, тоже даст мне ад)?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 августа 2009

Я предпочитаю сторонние приложения для переноса моих данных, я использую загрузчик данных, когда я переносил MS SQL на Foxpro, он отлично работает и может переносить практически любую базу данных.

Скачать Бесплатно: http://www.dbload.com

0 голосов
/ 25 июля 2009

Оказывается, это работает:

ALTER TABLE `site_oltp`.`members` MODIFY COLUMN `id` INT(11) NOT NULL;
SET FOREIGN_KEY_CHECKS = 0, UNIQUE_CHECKS = 0;

вставка записей ....

ALTER TABLE `site_oltp`.`members` MODIFY COLUMN `id` INT(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE `site_oltp`.`members` AUTO_INCREMENT = (LAST_ID_GOES_HERE + 1);

SET FOREIGN_KEY_CHECKS = 1, UNIQUE_CHECKS = 1";
...