Проблема ссылочной целостности при переходе от myisam к innodb - PullRequest
0 голосов
/ 09 июля 2010

Я хочу перенести одну из своих баз данных из myisam в innodb.Основная причина - позволить моему приложению соблюдать ссылочную целостность.

Это то, что я сделал

  1. Экспортировал текущую базу данных myisam
  2. Удалил базу данных
  3. Перешел на базу данных innodb http://parasjain.net/2010/06/08/how-to-switch-to-innodb-database-in-mysql/
  4. Проверено переключение двигателя, затем создана новая база данных

Ссылочная целостность теперь работает.Например, если я создаю Parent p1 и Child c1 и ссылаюсь на p1 в c1, я не могу удалить P1, пока от него зависит дочерний элемент.

Пока все хорошо

Но проблема возникает, когда я импортирую старые данные из экспортированного дампа

Проблема в том, что ссылочная целостность учитывается для новых данных.Но в моих существующих данных, если есть какие-либо отношения, такие как p2, на которые ссылается c2, я могу удалить p2, нарушая ссылочную целостность.c2 теперь является сиротой.

Есть ли способ исправить / переиндексировать таблицы, чтобы обеспечить ссылочную целостность также для существующих данных?

Ответы [ 2 ]

0 голосов
/ 09 июля 2010

Спасибо за ваши ответы. Это было бы полезно, потому что это привело бы меня к основной причине. Основной причиной проблемы является то, что мой mysqldump содержал операторы drop и create. Операторы создания имели ENGINE = MYISAM, так как во время экспорта это был двигатель.

Я создал новый дамп, используя опцию --no-create-info, и все работало просто отлично.

0 голосов
/ 09 июля 2010

Убедитесь, что у вас есть свежие индексы для всех ваших внешних ключей и ссылочных ключей (индексы таблиц обновляются при каждой вставке), а затем выполните

ALTER TABLE you_table0 ADD FOREIGN KEY ...

для каждой таблицы, и все ваши устаревшие данные уже находятся вместо.

Должно работать)

...