理解錯誤:「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)
此錯誤表示定義的函數或預存程序在其定義中缺少以下聲明之一:
在 MySQL 中啟用二進位日誌記錄時,需要這些聲明以確保資料完整性和複製一致性。
修復錯誤
要解決此問題,您可以使用以下兩種方法之一:
啟用log_bin_trust_function_creators 變數:
在MySQL控制台中,執行下列指令:
SET GLOBAL log_bin_trust_function_creators = 1;
或者,將下列內容新增至MySQL 設定檔(例如,mysql.ini):
log_bin_trust_function_creators = 1;
啟用此設定允許在二進位日誌記錄期間執行沒有明確聲明的函數。
為函數或流程添加適當的聲明:
對於始終為相同輸入參數產生相同輸出的函數,請使用確定性聲明。例如:
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