簡體   English   中英

MySQL“NO SQL”函數到底意味着什么?

[英]What does a MySQL “NO SQL” function mean exactly?

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 ;

這應該被聲明為NO SQL是否正確? 如果不是如何宣布?

如果上面不應該聲明為“NO SQL”,那么這個函數的例子是什么?

這意味着函數或過程中不包含SQL。

來自在線文檔

  • NO SQL表示該例程不包含SQL語句。

可能在那里作為優化輔助方法,允許將該函數標記為不需要SQL所必需的處理。 該組中的其他選項均表示不同級別的數據處理:

  • CONTAINS SQL表示該例程不包含讀取或寫入數據的語句。 如果沒有明確給出這些特征,則這是默認值。 這些語句的示例是SET @x = 1DO RELEASE_LOCK('abc') ,它們既不執行讀取也不執行寫入數據。

  • NO SQL表示該例程不包含SQL語句。

  • READS SQL DATA表示例程包含讀取數據的語句(例如, SELECT ),但不包含寫入數據的語句。

  • MODIFIES SQL DATA表示該例程包含可以寫入數據的語句(例如, INSERTDELETE )。

這些實際上是SQL標准定義的子句,但有趣的是要注意該鏈接頁面的另一個引用:

在MySQL中,這些特征僅供參考。 服務器不使用它們來約束允許例程執行的語句類型。

換句話說,除了使語言與標准兼容之外,它們實際上沒有在MySQL中任何事情。

就不使用SQL的函數示例而言,您可能會使用一個字符串並在稍后返回哈希值以便存儲到數據庫中。

樣本函數的正確定義是CONTAINS SQL。 除了SQL之外,SQL標准允許函數使用其他語言,例如,不包含SQl的C函數將被定義為LANGUAGE C NO SQL。

AC函數也可以包含非修改SQL,然后標准SQL定義將是LANGUAGE C CONTAINS SQL。

在MySQL中,僅支持SQL,因此僅為支持標准而存在NO SQL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM