」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼我在 MySQL 中收到「DETERMINISTIC、NO SQL 或 READS SQL DATA」錯誤?

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

發佈於2024-11-13
瀏覽:597

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;

    啟用此設定允許在二進位日誌記錄期間執行沒有明確聲明的函數。

  2. 為函數或流程添加適當的聲明:

    • 對於始終為相同輸入參數產生相同輸出的函數,請使用確定性聲明。例如:

      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