為什麼我在 MySQL 中收到「DETERMINISTIC、NO SQL 或 READS SQL DATA」錯誤?

Barbara Streisand
發布: 2024-10-31 16:16:02
原創
782 人瀏覽過

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;
      登入後複製
    • log_bin_trust_function_creators = 1;
      登入後複製
  2. 啟用此設定允許在二進位日誌記錄期間執行沒有明確聲明的函數。

      添加對函數或過程的適當聲明:
    • CREATE FUNCTION my_function() DETERMINISTIC
      BODY
       -- Your function logic
      END
      登入後複製
    • 對於始終為相同輸入參數產生相同輸出的函數,請使用DETERMINISTIC 聲明。例如:
    • CREATE FUNCTION my_function() NO SQL
      BODY
       -- Your function logic
      END
      登入後複製
    • 對於不包含任何 SQL 語句的函數,請使用 NO SQL 宣告。
    • CREATE FUNCTION my_function() READS SQL DATA
      BODY
       -- Your function logic
      END
      登入後複製
    • 對於僅從資料庫讀取資料的函數,請使用 READS SQL DATA 宣告。

理解確定性函數宣告

非確定性函數可以修改資料或使用不可預測的輸入,從而導致相同輸入參數產生不同的結果。因此,準確聲明函數行為以優化效能並確保資料完整性非常重要。 MySQL 文件提供了各種函數和預存程序函數宣告選項的全面指南,使您能夠為每個函數做出明智的決策功能。錯誤聲明可能會影響執行計劃並影響效能。

以上是為什麼我在 MySQL 中收到「DETERMINISTIC、NO SQL 或 READS SQL DATA」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!