«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему я получаю ошибку «ДЕТЕРМИНИСТИЧЕСКИЙ, НЕТ SQL или ЧИТАЕТ ДАННЫЕ SQL» в MySQL?

Почему я получаю ошибку «ДЕТЕРМИНИСТИЧЕСКИЙ, НЕТ SQL или ЧИТАЕТ ДАННЫЕ SQL» в MySQL?

Опубликовано 13 ноября 2024 г.
Просматривать:114

Why Do I Get the \

Понимание ошибки: Требование объявления «DETERMINISTIC, NO SQL или READS SQL DATA»

При импорте базы данных в MySQL это возможно чтобы столкнуться со следующей ошибкой:

1418 (HY000) at line 10185: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)

Эта ошибка указывает на отсутствие определенной функции или хранимой процедуры одно из следующих объявлений в его определении:

  • DETERMINISTIC
  • NO SQL
  • СЧИТАЕТ ДАННЫЕ SQL

Когда в MySQL включено двоичное ведение журнала, эти объявления необходимы для обеспечения целостности данных и согласованности репликации.

Исправления для ошибка

Чтобы решить эту проблему, вы можете использовать одно из двух методы:

  1. Включите переменную log_bin_trust_function_creators:

    • В консоли MySQL выполните следующую команду:

      SET GLOBAL log_bin_trust_function_creators = 1;
    • Альтернативно добавьте следующее в файл конфигурации MySQL (например, mysql.ini):

      log_bin_trust_function_creators = 1;

    Включение этого параметра позволяет выполнять функции без явных объявлений во время двоичного кода. logging.

  2. Добавьте соответствующее объявление к функции или процедуре:

    • Для функций, которые всегда производят один и тот же вывод для тех же входных параметров используйте объявление DETERMINISTIC. Например:

      CREATE FUNCTION my_function() DETERMINISTIC
      BODY
       -- Your function logic
      END
    • Для функций, которые не содержат операторов SQL, используйте объявление NO SQL.

      CREATE FUNCTION my_function() NO SQL
      BODY
       -- Your function logic
      END
    • Для функций, которые только читают данные из базы данных, используйте объявление READS SQL DATA.

      CREATE FUNCTION my_function() READS SQL DATA
      BODY
       -- Your function logic
      END

Понимание объявлений детерминированных функций

Недетерминированные функции могут изменять данные или использовать непредсказуемые входные данные, что приводит к различным результаты для тех же входных параметров. Таким образом, важно точно объявлять поведение функции для оптимизации производительности и обеспечения целостности данных.

Документация MySQL предоставляет подробное руководство по различным вариантам объявления функций и хранимых процедур, что позволяет вам принимать обоснованные решения для каждого из них. функция. Неверные объявления могут повлиять на планы выполнения и производительность.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3