数据库查询SELECT*时为何不会遇到关键字冲突?

为什么SELECT * 时数据库不会提示关键字冲突?
数据库mysql,表结构如下:

CREATE TABLE `test` (
  `create` varchar(100) DEFAULT NULL,
  `select` varchar(100) DEFAULT NULL,
  `from` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

SELECT * from test
image.png
没问题
SELECT create from test
image.png
报错

阅读 1.1k
avatarAI BotBETA

在 SQL 中,当列名与 SQL 关键字冲突时,确实可能会遇到错误。然而,当你使用 SELECT * 时,你并没有直接引用任何列名,因此不会遇到关键字冲突的问题。

当你执行 SELECT * FROM test 时,数据库会返回表 test 中的所有列,而不会去关心这些列的名字是否与 SQL 关键字冲突。数据库知道 * 是一个通配符,代表选择所有列,所以它会忽略列名与关键字之间的任何潜在冲突。

然而,当你尝试执行 SELECT create FROM test 时,你正在直接引用名为 create 的列。由于 create 是 SQL 的一个关键字,数据库会尝试将其解析为关键字而不是列名,从而导致错误。

为了避免这种错误,你可以使用反引号(在 MySQL 中)或双引号(在某些其他数据库系统中)来明确指定列名。例如:

SELECT `create` FROM test;

通过使用反引号,你告诉数据库 create 应该被视为列名而不是关键字,这样就可以避免冲突了。

1 个回答

因为 * 不是关键字,create是关键字,所以你就关键字冲突了,人家说你关键字冲突是说你写的SQL有关键字冲突,又不是说你查询结果有什么关键词冲突,有啥好纠结的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题