2012-03-09 2 views
0

Итак, в процессе создания наших таблиц мы не уделяли достаточно пристального внимания нашей системе, и все таблицы были созданы с помощью двигателя InnoDB. Это действительно плохо, потому что мы хотим иметь индекс FULLTEXT на нескольких столбцах.MySQL сменил двигатель на таблицы с внешними ключами

Итак, теперь я хочу конвертировать. И пока я нахожусь в этом, я просто хочу преобразовать все таблицы в MyISAM, чтобы, если мы когда-либо добавляем столбцы в будущем, которые хотим индексировать, у нас есть эта опция. Таким образом, я получил мой .sql файл следующим образом:

ALTER TABLE tableName1 Engine = MyISAM; 
ALTER TABLE tableName2 Engine = MyISAM; 

Однако, когда я пытаюсь запустить его, я получаю следующее сообщение об ошибке:

Error Code: 1217 Cannot delete or update a parent row: a foreign key constraint fails

Как вы уже догадались, мы имеем внешние ключи в наших таблицах. Не мой стиль, но также не мой отдел, ни мой сценарий создания.

Мой вопрос сводится к тому, что я могу изменить двигатель на этих таблицах без необходимости вытирать БД?

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

+0

Вы можете удалить FKs без взлома приложения? Или просто реализовать что-то лучше, например, Solr для полнотекстового индексирования? – ceejayoz

+0

@ceejayoz Удаление FK - это вариант, но не совсем то, что мне хотелось бы, так как у нас много таблиц. Мне пришлось бы пройти через каждую таблицу, найти внешние ключи и удалить их вручную. И это будет через несколько тестовых серверов. Я бы хотел сделать это, не делая этого. Кроме того, Solr на самом деле не вариант. – Ktash

+0

Если вы ищете простое решение без работы, я думаю, вы будете разочарованы. – ceejayoz

ответ

0

Ну, насколько мне известно, вроде, но не совсем. mysqldump базы данных и отредактировать ограничения внешнего ключа в сбрасываемом файле sql. И, конечно, измените движок в сценарии CREATE TABLE.

+0

Это вариант, который я рассмотрел, но мне нужно будет сделать это на нескольких базах данных, поэтому я могу использовать сценарий. – Ktash

0

InnoDB в отличие от MyISAM поддерживает внешние ключи и обладает множеством отличных функций, таких как транзакционная система, которая обеспечивает целостность всех таблиц. Таблицы MyISAM имеют тенденцию терпеть неудачу, когда у вас есть большие данные в таблицах или по многим другим причинам.
В ближайшем будущем InnoDB выполнит поиск FullText. Я рекомендую не менять движок таблиц, но есть что-то вроде Sphinx на месте. Sphinx гораздо более мощный и гораздо более гибкий, чем Fulltext Search, который работает для InnoDB.

Подробнее о полнотекстовом поиске в InnoDB:
InnoDB Fulltext search

+0

Сфинкс не является вариантом. Мой хост не разрешает длительные или продолжительные процессы. – Ktash

Смежные вопросы