Dav*_*vid 7 mysql stored-procedures determinism
作为一般规则,如果它们确实是确定性的,我是否应该使用 DETERMINISTIC 关键字声明所有存储过程?
在我看来,大多数存储过程都是确定性的。我认为唯一的非确定性过程是调用 RAND() 或 CURDATE() 等非确定性函数的过程是否正确?
无论如何,我问的原因是因为当我在 MySQL Workbench 中使用数据恢复功能时,我收到此错误:
ERROR 1418 (HY000) at line 1209: 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)
Run Code Online (Sandbox Code Playgroud)
简单地设置“log_bin_trust_function_creators=1”是更好的做法吗?请记住,我有 50 多个存储过程。
deterministic
对真正确定性的过程使用关键字是有意义的,因为:
但:
我认为唯一的非确定性过程是调用 RAND() 或 CURDATE() 等非确定性函数的过程是否正确?
不,从数据库读取数据并根据该数据(除了输入)得出结果的过程也是不确定的(因为数据可能会在调用之间发生变化)。
值得指出的是,在复制上下文中需要考虑过程是否为 DETERMINISTIC:
虽然:
如果正在使用基于行或混合二进制日志记录,即使函数是在没有 DETERMINISTIC 关键字的情况下定义的,也会接受并复制该语句。
归档时间: |
|
查看次数: |
6439 次 |
最近记录: |