数据库语法报错:ERROR 1064 (42000):for the right syntax to use near 'XXXX'

本文记录了一次因将字段命名为MySQL关键字“right”而导致的一系列语法错误,并分享了解决过程及教训。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生活中总会遇到大大小小的挫折,让人措手不及,哭笑不得。
比如我最近遇到的一个小问题:

我想对id=1 的用户修改一下权限:

update user set right=5 where id=1;

但是。。
MySQL一直语法报错:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'right permission typedefinition' at line 1
我的语句绝对没有问题
这让我不爽了好久

让我更不爽的是,原来错误如此弱智:
right是mysql中的关键字!
能犯这种错误的我还能怎么办?
于是我要把right改为permissio:

alter table user change right permission typedefinition;

但是。。

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'right permission typedefinition' at line 1

心态炸了好么?
改都改不了
我怎么弱智到取了个right作为变量名!
当时我也想取名叫permission的,但是因为right好写一些,于是。。
写这篇文章没什么意思,写代码要
规范细节,引以为戒。
不要在最弱智的地方犯下最傻B的错误

附带mysql的保留字:(来源http://www.cnblogs.com/lawdong/archive/2010/08/08/2357903.html


ADD ALL ALTER
ANALYZE AND AS
ASC ASENSITIVE  BEFORE
BETWEEN BIGINT  BINARY
BLOB    BOTH    BY
CALL    CASCADE CASE
CHANGE  CHAR    CHARACTER
CHECK   COLLATE COLUMN
CONDITION   CONNECTION  CONSTRAINT
CONTINUE    CONVERT CREATE
CROSS   CURRENT_DATE    CURRENT_TIME
CURRENT_TIMESTAMP   CURRENT_USER    CURSOR
DATABASE    DATABASES   DAY_HOUR
DAY_MICROSECOND DAY_MINUTE  DAY_SECOND
DEC DECIMAL DECLARE
DEFAULT DELAYED DELETE
DESC    DESCRIBE    DETERMINISTIC
DISTINCT    DISTINCTROW DIV
DOUBLE  DROP    DUAL
EACH    ELSE    ELSEIF
ENCLOSED    ESCAPED EXISTS
EXIT    EXPLAIN FALSE
FETCH   FLOAT   FLOAT4
FLOAT8  FOR FORCE
FOREIGN FROM    FULLTEXT
GOTO    GRANT   GROUP
HAVING  HIGH_PRIORITY   HOUR_MICROSECOND
HOUR_MINUTE HOUR_SECOND IF
IGNORE  IN  INDEX
INFILE  INNER   INOUT
INSENSITIVE INSERT  INT
INT1    INT2    INT3
INT4    INT8    INTEGER
INTERVAL    INTO    IS
ITERATE JOIN    KEY
KEYS    KILL    LABEL
LEADING LEAVE   LEFT
LIKE    LIMIT   LINEAR
LINES   LOAD    LOCALTIME
LOCALTIMESTAMP  LOCK    LONG
LONGBLOB    LONGTEXT    LOOP
LOW_PRIORITY    MATCH   MEDIUMBLOB
MEDIUMINT   MEDIUMTEXT  MIDDLEINT
MINUTE_MICROSECOND  MINUTE_SECOND   MOD
MODIFIES    NATURAL NOT
NO_WRITE_TO_BINLOG  NULL    NUMERIC
ON  OPTIMIZE    OPTION
OPTIONALLY  OR  ORDER
OUT OUTER   OUTFILE
PRECISION   PRIMARY PROCEDURE
PURGE   RAID0   RANGE
READ    READS   REAL
REFERENCES  REGEXP  RELEASE
RENAME  REPEAT  REPLACE
REQUIRE RESTRICT    RETURN
REVOKE  RIGHT   RLIKE
SCHEMA  SCHEMAS SECOND_MICROSECOND
SELECT  SENSITIVE   SEPARATOR
SET SHOW    SMALLINT
SPATIAL SPECIFIC    SQL
SQLEXCEPTION    SQLSTATE    SQLWARNING
SQL_BIG_RESULT  SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT
SSL STARTING    STRAIGHT_JOIN
TABLE   TERMINATED  THEN
TINYBLOB    TINYINT TINYTEXT
TO  TRAILING    TRIGGER
TRUE    UNDO    UNION
UNIQUE  UNLOCK  UNSIGNED
UPDATE  USAGE   USE
USING   UTC_DATE    UTC_TIME
UTC_TIMESTAMP   VALUES  VARBINARY
VARCHAR VARCHARACTER    VARYING
WHEN    WHERE   WHILE
WITH    WRITE   X509
XOR YEAR_MONTH  ZEROFILL
MySQL允许部分关键字用做未引起来的识别符,因为许多人以前曾使用过它们。下面列出了一些例子:

ACTION

BIT

DATE

ENUM

NO

TEXT

TIME

TIMESTAMP
/**
*
* ━━━━━━神兽出没━━━━━━
*     ┏┓     ┏┓
*   ┏┛┻━━━┛┻┓
*   ┃          ┃
*   ┃  ━      ┃
*   ┃ ┳┛ ┗┳  ┃
*   ┃         ┃
*   ┃  ┻     ┃
*   ┃         ┃ 
*   ┗━┓   ┏━┛ Code is far away from bug with the animal protecting
*     ┃   ┃    神兽保佑,代码无bug
*     ┃   ┃
*     ┃   ┗━━━┓
*     ┃        ┣┓
*     ┃        ┏┛
*     ┗┓┓┏━┳┓┏┛
*      ┃┫┫  ┃┫┫
*      ┗┻┛  ┗┻┛
*
* ━━━━━━感觉萌萌哒━━━━━━
*/
### 解决方案 当遇到 `ERROR 1064 (42000)` 的语法错误时,通常是由于 SQL 语句存在拼写错误、遗漏必要参数或不遵循 MySQL 的语法规则所致。针对 `ALTER TABLE` 和 `SHOW ENGINES` 的具体问题,以下是详细的解决方案。 #### 关于 `ALTER TABLE` 的语法错误 在执行 `ALTER TABLE` 操作时,常见的语法问题是未正确指定表名或存储引擎选项。正确的语法如下所示: ```sql ALTER TABLE table_name ENGINE=storage_engine; ``` 在此上下文中,`table_name` 应替换为目标表的实际名称,而 `storage_engine` 则表示所需的存储引擎(例如 InnoDB 或 MyISAM)。如果提供的值不符合预期格式,MySQL 将抛出类似于以下的错误消息:`You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax...`[^3]。 为了修正这类错误,请确保所提供的表名和存储引擎均有效,并且严格遵守大小写敏感性和其他命名约定。另外需要注意的是,不同版本间的 MySQL 可能会对某些特性提供不同程度的支持;因此建议查阅对应文档来核实兼容性情况。 #### 关于 `SHOW ENGINES` 的语法错误 对于 `SHOW ENGINES` 查询而言,一般不会轻易触发 `ERROR 1064` 类型的错误,除非输入形式偏离标准模式。典型的用法非常简单明了: ```sql SHOW ENGINES; ``` 这条指令旨在列举当前安装的所有可用存储引擎连同它们的状态信息一并呈现出来。假使遭遇类似的错误提示,则很可能是无意间附加了一些多余的字符或是结构化不良的内容扰乱了解析流程。此时应当重新审视原始请求串是否存在多余成分干扰正常解析逻辑。 #### 示例代码 下面给出两个具体的例子帮助理解如何规避潜在陷阱: ##### 更改现有表格的默认存储引擎为 InnoDB ```sql -- 正确的方式去改变 user_table 表到 INNODB 存储引擎 ALTER TABLE user_table ENGINE=InnoDB; ``` ##### 展示所有支持的存储引擎列表 ```sql -- 显示所有的存储引擎及其状态 SHOW ENGINES; ``` 通过以上调整应该能够顺利解决问题而不至于再次陷入相同的困境之中。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值