0

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

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

-> 变为:

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

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

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

4

1 回答 1

1

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

但是使用查询重写插件,您必须枚举所有不带缩写的查询,以及您希望如何重写它们。这听起来不会为您节省任何打字,它需要更多的打字。

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

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

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

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

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

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

我不会尝试更改 SQL 语法。

于 2021-06-18T19:39:48.647 回答