MySQL"NO SQL"函数qualifer的含义是什么?假设我有这个函数定义:
DELIMITER $$
CREATE FUNCTION Test() RETURNS text
NO SQL
BEGIN
DECLARE x TEXT DEFAULT '';
SET x = CONCAT('X = ', UUID());
RETURN x;
END $$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
这应该被声明为NO SQL是否正确?如果不是如何宣布?
如果上面不应该声明为"NO SQL",那么这个函数的例子是什么?
这意味着函数或过程中不包含SQL.
来自在线文档:
NO SQL 表示该例程不包含SQL语句.它可能在那里作为优化辅助方法,允许将该函数标记为不需要SQL所必需的处理.该组中的其他选项均表示不同级别的数据处理:
CONTAINS SQL表示该例程不包含读取或写入数据的语句.如果没有明确给出这些特征,则这是默认值.这些语句的例子是SET @x = 1或者DO RELEASE_LOCK('abc'),它们既可以执行但不能读取或写入数据.
NO SQL 表示该例程不包含SQL语句.
READS SQL DATA表示例程包含读取数据的语句(例如SELECT),但不包含写入数据的语句.
MODIFIES SQL DATA表示该例程包含可能写入数据的语句(例如,INSERT或DELETE).
这些实际上是SQL标准定义的子句,但有趣的是要注意该链接页面的另一个引用:
在MySQL中,这些特征仅供参考.服务器不使用它们来约束允许例程执行的语句类型.
换句话说,除了使语言与标准兼容之外,它们实际上并没有在MySQL中做任何事情.
就不使用SQL 的函数示例而言,您可能会使用一个字符串并在稍后返回哈希值以便存储到数据库中.
| 归档时间: |
|
| 查看次数: |
3812 次 |
| 最近记录: |