【发布时间】:2021-08-02 12:05:10
【问题描述】:
我只是偶然发现“no”是Mysql中的保留字/关键字。
我在谷歌上搜索了它的用途,但找不到答案。
有人可以解释一下,或者有任何链接可以解释每个Mysql的保留关键字用法吗?
【问题讨论】:
-
MySQL 现在可能还没有使用它,但将来可能会使用它。一个很好的类比可能是
goto关键字,它在 Java 中保留,但 Java 并未实际使用。
标签: mysql reserved-words
我只是偶然发现“no”是Mysql中的保留字/关键字。
我在谷歌上搜索了它的用途,但找不到答案。
有人可以解释一下,或者有任何链接可以解释每个Mysql的保留关键字用法吗?
【问题讨论】:
goto 关键字,它在 Java 中保留,但 Java 并未实际使用。
标签: mysql reserved-words
我搜索了MySQL 8.0 grammar file,发现NO令牌的使用方式如下:
在级联外键声明中,可以使用ON {UPDATE|DELETE} NO ACTION。
在stored routines 的NO SQL 特征中。
COMMIT 语句的一个选项,这意味着不在提交当前事务后自动启动新事务或释放会话。
COMMIT AND NO CHAIN;
COMMIT AND NO RELEASE;
https://dev.mysql.com/doc/refman/8.0/en/commit.html 说:
包含
NO关键字会抑制CHAIN或RELEASE完成,如果completion_type系统变量设置为默认导致链接或释放完成,这将很有用。
作为一种合并插入类型,当将CREATE TABLE 用于 MERGE 表时,这是一个表选项。如果您将表声明为:
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)
【讨论】:
NO是ANSI SQL中的保留字,但目前在MySQL中不用作关键字。它已经如此定义,因此在以后的扩展中可以添加语义用法。
语言定义中的一种常见做法是保留一些词,但不使用它们,因为它们在语言的早期状态下是不需要的,甚至以后可能不需要使用它。 但是稍后将保留关键字添加到现有语言中总是很痛苦,因为您可能在现有脚本中有具有该名称的变量,并且您需要更新/重写它们以与语言更新兼容(哪些语言更新尝试防止向后兼容并简化更新过程)。这就是为什么语言设计者从根据需要保留更多关键字开始,以便以后更灵活地将它们添加到语言中而不会破坏向后兼容性。
【讨论】: