Коли я виконую цю команду в MySQL:
SET FOREIGN_KEY_CHECKS=0;
Це впливає на весь двигун чи це лише моя поточна транзакція?
Коли я виконую цю команду в MySQL:
SET FOREIGN_KEY_CHECKS=0;
Це впливає на весь двигун чи це лише моя поточна транзакція?
Відповіді:
Це базується на сеансі, коли встановлюєте, як ви зробили у своєму запитанні.
https://dev.mysql.com/doc/refman/5.7/uk/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/uk/server -system-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