【问题标题】:MySQL keyword aliasesMySQL 关键字别名
【发布时间】:2021-09-03 10:58:45
【问题描述】:

我想为 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。

【问题讨论】:

  • 使用 IDE 的自动完成功能。我见过存在类似事物的语言,结果是一场灾难!
  • 同意。您必须通过宏预处理器对其进行处理,但这会大大增加与列名发生冲突的可能性
  • 这来自学校的单字母表/子查询别名?每次我都会考虑可读性而不是简洁性。
  • 我当然理解协作环境中关于可读性的论点。对于个人性质的工作流程,例如需要连续进行大量查询的调查,我认为这提供了价值。这与人们将“git”别名为“g”的原因相同。
  • s c1, c w c2=2 t 'y' el 'n' e cb f tab2 gb c1,cb order by cb d; 我希望永远不会遇到这样的 IRL。老实说,即使在方言中看到Sel 也会让我发痒。我同意其他人使用具有可自定义自动完成功能的 IDE!

标签: mysql sql alias


【解决方案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 关键字被故意选择为不常见的英语单词,因此它们不太可能与您的单词发生冲突' d 用作表或列标识符。

我同意上述 cmets 中的其他人的观点,即如果您确实这样做的话,您应该与您的编辑器一起解决这个问题。必须有编辑器功能才能将缩写词映射到完整词。

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

我不会尝试更改 SQL 语法。

【讨论】:

  • DESC vs DESCENDINGDESCRIBE 是“证明规则的例外”。
猜你喜欢
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 1970-01-01
相关资源
最近更新 更多