вторник, 6 марта 2018 г.

Mysql и проверка внешних ключей

Начнем с простейшей команды:

> mysql -u user -p databasename < dump.sql

Иногда дамп бывает сделан так, что сначала создается таблица, в которой имеется foreign key на еще не созданную. В этом случае, процедура импорта будет прервана с сообщением вида:

ERROR 1215 (HY000) at line 42: Cannot add foreign key constraint

Что же делать? Специально для такого случая имеется системная переменная FOREIGN_KEY_CHECKS. Оптимальным способом ее использования будет следующий:

> mysql -u user -p --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" databasename < dump.sql

После этого импорт отлично отрабатывает.

Чтобы два раза не вставать с дивана: для просмотра больших дампов можно использовать утилиту sed.
Например, при импорте вышеуказанного дампа вам вывелось сообщение вида.

ERROR 1215 (HY000) at line 19242: Cannot add foreign key constraint

Допустим, вы не знаете причину и хотите посмотреть, что же там такого на строке 19242. Конечно, можно открыть файл и медленно и печально листать до нужной строки. А можно сделать так:

sed -n '19240,19245p; 19246q' dump.sql

Данная команда покажет вам строки с 19240 по 19245, а поиск этих строк в файле и последующий вывод будут осуществлены очень быстро.