惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - abce

Redis 如何通过槽优化分布式系统中的键值存储 Redis 集群架构 Redis 的演进之路:从缓存到 AI 数据库(V1.0至8.4) Redis 缓存过期和删除策略 Redis 的 aof-use-rdb-preamble 及其工作原理 MySQL主从之间具有不同数据类型的列的复制 MySQL 如何存储临时文件 理解mysql中的 local_infile 变量 pbm 还原物理备份提示executable file not found in $PATH. stderr MySQL 日志报错:Got packets out of order MySQL 8.0 已废弃的功能 sqlserver 删除job失败 查看 percona server for mongodb 的版本 MySQL 8 的哈希连接 MySQL 8.0 克隆插件及其原理 有效管理 MongoDB 日志和系统资源 MongoDB 数据碎片处理 MongoDB 8.0 的复制 min_examined_row_limit 对慢查询日志的影响
MySQL 保留字需要了解的内容
abce · 2025-04-09 · via 博客园 - abce

2025-04-09 11:09  abce  阅读(303)  评论()    收藏  举报

什么是 MySQL 保留字

MySQL 保留字是预定义的 SQL 术语,数据库引擎将其解释为命令而不是标识符。这些词语包括 SELECT、JOIN 和 DELETE 等关键词语,它们定义了 MySQL 处理数据的方式,而不能用作表或列名。

保留字的存在是为了执行 MySQL 的语法规则,防止查询中出现歧义。例如,如果你试图创建一个名为 SELECT 的表:

CREATE TABLE SELECT (id INT, name VARCHAR(50)); 

MySQL 将不会知道你是在定义表还是在执行查询,从而导致语法错误。

使用保留字的限制

MySQL 不允许将保留字用作表或列名,必须用反引号(键盘上的`)括起来,以避免语法错误。不过,依赖反引号一般不是最佳做法,因为这会带来可维护性问题,使查询更难阅读,并增加将来与 MySQL 更新冲突的风险。

正确的用法

使用保留字时,请用反引号括起来,以防止语法错误:

CREATE TABLE `ORDER` (id INT, status VARCHAR(50)); 

不正确的用法

如果没有反引号,MySQL 会将 ORDER 视为保留关键字,从而导致语法错误:

CREATE TABLE ORDER (id INT, status VARCHAR(50)); -- ERROR! 

如何避免保留字冲突

·使用清晰、描述性的名称,而不是保留字。比如,使用 ORDERS 代替 ORDER。

·遵循命名约定以提高数据库的可维护性和可读性。

·在命名表和列之前,查看 MySQL 的官方保留字列表。

如何识别 MySQL 中的保留字?

在命名表或列前,请检查该词是否为保留字,以避免语法错误。这将有助于避免在 MySQL 中使用未转义的保留字。

1. 查看 MySQL 的官方保留字列表

MySQL 保留字列表并不是一成不变的,它会随着每个新版本的变化而变化。在老版本中可以使用的单词现在可能受到限制。例如,WINDOW 和 WITH 成为 MySQL 8.0 保留字,如果这些字在老的schema中用作表名或列名而不带反引号,升级后查询可能会中断。

2. 运行快速查询检查单词

不确定某个词是否保留?与其猜测,不如运行此查询。

select * from information_schema.keywords where word = 'your_word'; 

·如果有结果,说明该词是保留的--重命名或使用反引号。

·如果没有结果,则可以安全使用。

3. 查看论坛,了解特定版本的解决方法

在使用老的文档或论坛帖子时,请务必验证解决方案是否适用于你的 MySQL 版本。某些变通方法可能依赖于过时的语法或假定不同的保留字行为,因此在实施前要仔细检查兼容性。

4. 升级 MySQL 前进行冲突检查

在升级 MySQL 之前,运行此查询检查表或列名中的保留字冲突。

select column_name, table_schema, table_name   
from information_schema.columns   
where column_name in (select word from information_schema.keywords)
and table_schema not in ('mysql','sys','information_schema','performance_schema'); 

如果该查询返回任何结果,这些列名现在就是保留字。你必须重新命名它们,或使用 MySQL 用引号转义保留字。这将帮助你发现任何与 MySQL 保留字冲突的列名,让你能在升级前进行必要的更改,防止查询意外失败。