MySQL"NO SQL"函数到底意味着什么?

ric*_*chb 4 mysql

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",那么这个函数的例子是什么?

pax*_*blo 5

这意味着函数或过程中不包含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 的函数示例而言,您可能会使用一个字符串并在稍后返回哈希值以便存储到数据库中.

  • 您问题中的函数不包含 SQL 语句。 (2认同)