【发布时间】:2011-12-18 07:03:48
【问题描述】:
我对一个看似简单的概念感到困惑。 Mysql 将确定性函数定义为
对于相同的输入参数总是产生相同的结果
所以在我的理解中,像这样的功能
CREATE FUNCTION foo (val INT) READS SQL DATA
BEGIN
DECLARE retval INT;
SET retval = (SELECT COUNT(*) FROM table_1 WHERE field_1 = val);
RETURN retval;
END;
不是确定性的(不能保证在两次调用函数之间不会发生删除/更新/插入)。同时,我看到许多功能几乎相同,即根据查询结果返回值,并声明为DETERMINISTIC。看起来我缺少一些非常基本的东西。
谁能澄清这个问题?
谢谢。
更新
感谢那些回答(+1)的人;到目前为止,DETERMINISTIC 关键字似乎被广泛滥用。对我来说仍然很难相信有这么多人这样做,所以我会等待其他答案。
【问题讨论】:
-
您能举一个您所说的“许多功能”的例子吗?
-
@Mat: 例如,dev.mysql.com/doc/refman/5.0/en/create-procedure.html(在用户 cmets 部分,搜索“CREATE FUNCTION db.fnfullname” - 它从 db 中读取行以获取传递的 id 并根据结果返回值选择)。
-
"... 用户 cmets ..." ... 一些真正的 mysql 功能你想到了吗?
-
我喜欢这个问题。我没有看到 MySQL 文档中的哪个地方声明一个函数不能同时是
DETERMINISTIC和READS SQL DATA(以及这对函数意味着什么)。 -
@Mat:我同意你的观点,“用户 cmets”部分不是很可靠的来源。我的第一个想法是我不应该太认真。所以我在问这个问题之前搜索了一下,发现了许多类似的实现(另一个例子,databasejournal.com/features/mysql/article.php/3569846/…,“访问存储函数中的表”)。然后我意识到这要么是一个常见的错误,要么是我遗漏了一些明显的东西......
标签: mysql user-defined-functions deterministic