MySQL 个关键字别名

MySQL keyword aliases

我想为 MySQL 关键字设置别名,以便更快地输入重复的(或任何,真的)查询。示例:

select status, count(*) from orders group by status order by created_at;

-> 变为:

s status, c(*) f orders gb status ob created_at;

我怎样才能实现上述目标?我环顾四周,但不幸的是,大多数搜索都指向列和 table 别名,我没有在 MySQL 文档中看到提及。

我对 MySQL 特别感兴趣,但实际上,这可能涉及一般的 SQL DDL。

SQL关键字由RDBMS服务器中的代码解析。要更改解析器识别的关键字,您需要更改 RDBMS 的代码并使用您的自定义更改重新编译它。

在MySQL中,关键字的拼写定义在这个代码文件中:https://github.com/mysql/mysql-server/blob/8.0/sql/lex.h

另一种侵入性较小的解决方案是使用查询重写插件。这是在 MySQL 5.7 中引入的,在 MySQL 8.0.12 中它支持更多类型的 SQL 语句。

https://dev.mysql.com/doc/refman/8.0/en/rewriter-query-rewrite-plugin.html

但是使用查询重写插件,您必须在没有缩写的情况下枚举所有查询,以及您希望如何重写它们。这听起来不像是可以节省您的任何输入,它需要 更多 的输入。

在任何情况下,使用缩写关键字都会带来新的语法挑战,因为如果您使用的标识符(table 名称、列名等)与保留关键字冲突,则必须用反引号分隔它们:

s * f `s` w `gb` = 123 gb `s`.date;

区分关键字和标识符之间的区别会变得非常混乱。

我曾与 1980 年代 ANSI SQL 委员会的一位成员交换过电子邮件,他说许多 SQL 关键字被故意选择为不常见的英语单词,因此他们不太可能与您用作 table 或列标识符的词发生冲突。

我同意上面评论中其他人的意见,如果你真的这样做的话,你应该和你的编辑一起解决这个问题。必须有编辑器功能才能将缩写词映射到完整词。

例如,您甚至可以在 vim 中使用 :ab 命令执行此操作。参见 https://vim.fandom.com/wiki/Using_abbreviations

我不会尝试更改 SQL 语法。