Когда я выполняю эту команду в MySQL:
SET FOREIGN_KEY_CHECKS=0;
Это влияет на весь движок, или это только моя текущая транзакция?
Когда я выполняю эту команду в MySQL:
SET FOREIGN_KEY_CHECKS=0;
Это влияет на весь движок, или это только моя текущая транзакция?
Это основано на сеансе, когда установлено так, как вы сделали в своем вопросе.
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;
На самом деле существует две переменные 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
Как объясняет Рон, существуют две переменные: локальная и глобальная. Локальная переменная всегда используется и совпадает с глобальным при подключении.
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 снова включены. Это позволяет создавать несогласованную базу данных, даже если внешние ключи и проверки включены.
Если вы хотите, чтобы ваши внешние ключи были полностью согласованы, вам нужно добавить ключи, пока проверка включена.
# will get you the current local (session based) state.
SHOW Variables WHERE Variable_name='foreign_key_checks';
Если вы не установили GLOBAL, пострадали только ваши сеансы.
У меня была такая же ошибка, когда я пытался перенести базу данных 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
В случае использования браузера запросов Mysql SET FOREIGN_KEY_CHECKS=0;
не влияет на версию 1.1.20. Однако он отлично работает в браузере запросов Mysql 1.2.17