最近在使用MySQL 8時,遇到了一個奇怪的問題——無法創建函數。具體來講,當我嘗試創建一個函數時,MySQL給我返回了如下錯誤信息:
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (youmightwant to use the less safe log_bin_trust_function_creators variable)
在這個錯誤信息中,MySQL告訴我們無法創建函數是由于"binary logging"被啟用,而我們的函數的聲明中缺少"DETERMINISTIC"、"NO SQL"或"READS SQL DATA"等關鍵字。
那么,我們該如何解決這個問題呢?
首先,讓我們來了解一下這個錯誤信息中提到的三個關鍵字的意思:
- DETERMINISTIC:這個關鍵字告訴MySQL,同樣的輸入數據在不同的時間返回的結果是相同的。如果函數并不是確定的,那么就不應該使用這個關鍵字。
- NO SQL:這個關鍵字告訴MySQL,這個函數不會修改任何數據(例如,它只是簡單的計算一些東西并返回結果)。如果函數會修改數據,那么就不應該使用這個關鍵字。
- READS SQL DATA:這個關鍵字告訴MySQL,這個函數需要讀取數據庫中的數據(例如,它需要執行一個SELECT語句)。如果函數不需要讀取數據,那么就不應該使用這個關鍵字。
如果我們想要創建一個函數,并且想要避免上面提到的錯誤,那么我們需要在函數聲明中包含至少一個這些關鍵字。
例如,如果我們要創建一個簡單的加法函數,那么代碼如下所示:
CREATE FUNCTION add_numbers(a INT, b INT) RETURNS INT DETERMINISTIC NO SQL BEGIN DECLARE c INT; SET c = a + b; RETURN c; END
在這個代碼中,我們包含了"DETERMINISTIC"和"NO SQL"關鍵字,因此MySQL將不會報告任何錯誤。
盡管這個錯誤看起來很奇怪,但只要我們包含了正確的關鍵字,就可以輕松解決它。如果你也遇到了這個問題,那么可以嘗試修改函數聲明并再次嘗試創建函數。
上一篇jquery div漂浮
下一篇九宮格css代碼自適應