Когда я выполняю эту команду в 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 -система-variables.html
foreign_key_checks
и в том же сеансе ожидать, что он проигнорирует ограничения внешних ключей. Вам необходимо установить неглобальную переменную.
Как объяснил Рон, есть две переменные, локальная и глобальная. Локальная переменная всегда используется и является такой же, как глобальная при подключении.
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