Использует ли MySQL foreign_key_checks всю базу данных?

Когда я выполняю эту команду в MySQL:

SET FOREIGN_KEY_CHECKS=0;

Это влияет на весь движок, или это только моя текущая транзакция?

Ответ 1

Это основано на сеансе, когда установлено так, как вы сделали в своем вопросе.

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html

В соответствии с этим FOREIGN_KEY_CHECKS - это "Оба" для области видимости. Это означает, что он может быть установлен для сессии:

SET FOREIGN_KEY_CHECKS=0;

или глобально:

SET GLOBAL FOREIGN_KEY_CHECKS=0;

Ответ 2

На самом деле существует две переменные foreign_key_checks: глобальная переменная и локальная переменная (для каждой сессии). При подключении переменная сеанса инициализируется значением глобальной переменной.
Команда SET foreign_key_checks изменяет переменную сеанса.
Чтобы изменить глобальную переменную, используйте SET GLOBAL foreign_key_checks или SET @@global.foreign_key_checks.

Обратитесь к следующим разделам руководства:
http://dev.mysql.com/doc/refman/5.7/en/using-system-variables.html
http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html

Ответ 3

Как объясняет Рон, существуют две переменные: локальная и глобальная. Локальная переменная всегда используется и совпадает с глобальным при подключении.

SET FOREIGN_KEY_CHECKS=0;
SET GLOBAL FOREIGN_KEY_CHECKS=0;

SHOW Variables WHERE Variable_name='foreign_key_checks'; # always shows local variable

При настройке переменной GLOBAL локальная не изменяется для любых существующих подключений. Вам нужно снова подключить или установить локальную переменную.

Возможно, неинтуитивный, MYSQL не применяет внешние ключи, когда FOREIGN_KEY_CHECKS снова включены. Это позволяет создавать несогласованную базу данных, даже если внешние ключи и проверки включены.

Если вы хотите, чтобы ваши внешние ключи были полностью согласованы, вам нужно добавить ключи, пока проверка включена.

Ответ 4

# will get you the current local (session based) state.
SHOW Variables WHERE Variable_name='foreign_key_checks';

Если вы не установили GLOBAL, пострадали только ваши сеансы.

Ответ 5

У меня была такая же ошибка, когда я пытался перенести базу данных Drupal на новый локальный сервер Apache (я использую XAMPP на компьютере с Windows). На самом деле я не знаю, что означает эта ошибка, но, выполнив шаги, описанные ниже, я импортировал базу данных без ошибок. Надеюсь, что это может помочь:

Изменение php.ini в C:\xampp\php\php.ini

max_execution_time = 600
max_input_time = 600
memory_limit = 1024M
post_max_size = 1024M

Изменение my.ini в C:\xampp\mysql\bin\my.ini

max_allowed_packet = 1024M

Ответ 6

В случае использования браузера запросов Mysql SET FOREIGN_KEY_CHECKS=0; не влияет на версию 1.1.20. Однако он отлично работает в браузере запросов Mysql 1.2.17