在 MySQL 中使用的 "no" 关键字是什么?

What is the "no" keyword used for in MySQL?

我只是偶然发现“no”是Mysql中的保留word/keyword。

我在 Google 上搜索了它的用途,但找不到答案。

有人可以解释或有任何 link 文章解释每个 Mysql 的保留关键字用法吗?

https://dev.mysql.com/doc/refman/8.0/en/keywords.html

NOANSI SQL中的保留字,但目前在MySQL中不作为关键字使用。它已经这样定义,因此在以后的扩展中可以添加语义用法。

语言定义中的一种常见做法是,保留但不使用某些词,因为在语言的早期状态不需要它们,甚至以后可能不需要使用它.
但是,稍后将保留关键字添加到现有语言中总是很痛苦,因为现有脚本中可能有具有该名称的变量,并且您需要 update/rewrite 它们才能与语言更新兼容(哪些语言更新尽量防止向后兼容并简化更新过程)。这就是为什么语言设计者首先根据需要保留更多关键字,以便稍后更灵活地将它们添加到语言中而不会破坏向后兼容性。

我搜索了 MySQL 8.0 grammar file,发现 NO 令牌的使用方式如下:

  • 在级联外键声明中,可以使用ON {UPDATE|DELETE} NO ACTION.

  • NO SQL特征中为stored routines

  • COMMIT语句的一个选项,意思是do not在提交当前事务后自动启动一个新的事务或者释放session。

    COMMIT AND NO CHAIN;
    COMMIT AND NO RELEASE;
    

    https://dev.mysql.com/doc/refman/8.0/en/commit.html 说:

    Including the NO keyword suppresses CHAIN or RELEASE completion, which can be useful if the completion_type system variable is set to cause chaining or release completion by default.

  • 作为合并插入类型,当使用 CREATE TABLE 进行 MERGE table 时,这是一个 table 选项。如果将 table 声明为:

    ,则插入将被禁用
    CREATE TABLE mytable (...) ENGINE=MERGE UNION=(...) INSERT_METHOD=NO;
    

就其价值而言,NO 关键字不是 保留 关键字。在您链接到的关键字文档页面中,保留关键字标有“(R)”,但 NO 没有该注释。因此,您可以使用 NO 作为标识符,而不必在反引号中对其进行定界。

mysql> create table no ( i int);
Query OK, 0 rows affected (0.05 sec)