2010-06-23 3 views
1

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

Приложение вылетает с ошибкой MySQLIntegrityConstraintViolationException. Это не дает мне имя таблицы с нарушением первичного ключа или содержимым разбитого запроса SQL.

Есть ли какой-либо вариант сервера MySQL, который я могу переключить, чтобы дать мне больше информации об устранении неполадок? Может быть, текст неудавшегося запроса или имя ограничения первичного ключа, которое нарушено?

+0

Ошибка, как правило, связана с столкновением либо с первичным ключом, либо с уникальным ограничением ключа. У вас есть настройка на столе? –

+0

База данных содержит большое количество таблиц, большинство из которых имеют первичные/уникальные ограничения. Моя проблема заключается в определении того, какое из ограничений было нарушено. – David

ответ

0

Вы можете включить общий файл журнала: http://dev.mysql.com/doc/refman/5.1/en/query-log.html. Таким образом, можно будет увидеть, в какой момент сервер перестает обрабатывать запросы.

Вы также можете запустить команду MySQL show processlist, чтобы увидеть, какие запросы обрабатываются в это время.

Также ознакомьтесь со всеми другими журналами ошибок приложения.

Первая попытка может быть отключить внешнего ключа проверки во время миграции: SET foreign_key_checks = 0;

Первое предположение было бы, что старый сервер поддерживается 0 в качестве значения первичного ключа, в то время как новый один не делает.

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