前几天帮同事解决一个案例,在主从复制环境下,从库上的MySQL版本号是5.5.5,遇到下面的错误:

~~~

#其他非相关信息我都隐藏掉了

[(yejr@imysql.com)]> show slave status \G;

Slave_IO_Running: Yes

Slave_SQL_Running: No

Last_Errno: 1064

Last_Error: Error '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 '6e86db84_14847168f19__8000' at line 1' on query. Default database: 'act'. Query: 'SAVEPOINT 6e86db84_14847168f19__8000'

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 1064

Last_SQL_Error: Error '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 '6e86db84_14847168f19__8000' at line 1' on query. Default database: 'act_log'. Query: 'SAVEPOINT 6e86db84_14847168f19__8000'

~~~

第一感觉是遇到保留关键字了,不过看到这么长的字符串,不应该是保留关键字才对。

经过尝试,最后发现是字符串中的 “e” 这个字符如果存在就可能会报错,看起来应该是bug才对了。

在MySQL的bug系统里确实找到了这个bug,不过看bug描述,在5.5版本中应该是已经修复了才对,看来太不靠谱了呀~~

关于这个bug:[Savepoint identifier is occasionally considered as floating point numbers](http://bugs.mysql.com/bug.php?id=55962 "Savepoint identifier is occasionally considered as floating point numbers")

其实除了升级版本外,解决方法也很简单,把savepoint后面的 identifier 字符串用反引号(波浪号的下档键,英文叫做 backticks 键)引用起来就行。

例如:

~~~

savepoint `6e86db84_14847168f19__8000`;

~~~

这样就可以了。

这个案例也提示我们,在写SQL时,涉及到数据库、表、字段、identifier 等名称时,最好是都能用反引号引用,确保可用。

曾经看到线上数据表有个字段名是 check ,这个名字在MySQL里很早就已经是保留关键字,幸好开发同学比较靠谱,都加上了反引号。

关于savepoint的2个bug:

[Savepoint Identifier should be enclosed with backticks](http://bugs.mysql.com/bug.php?id=55961 "Savepoint Identifier should be enclosed with backticks")

[Savepoint identifier is occasionally considered as floating point numbers](http://bugs.mysql.com/bug.php?id=55962 "Savepoint identifier is occasionally considered as floating point numbers")

mysql savepoint语法_SAVEPOINT语法错误一例相关推荐

  1. mysql savepoint作用_savepoint原理

    保存点 在MySQL中, 保存点SAVEPOINT属于事务控制处理部分.利用SAVEPOINT可以回滚指定部分事务,从而使事务处理更加灵活和精细.SAVEPOINT相关的SQL语句如下 SAVEPOI ...

  2. mysql中的删除语法错误_mysql – EXPLAIN中的SQL语法错误

    我试图让一个解释命令在 mysql中工作.我正在尝试解决此删除查询的性能问题: DELETE FROM boost_cache_relationships WHERE base_dir = 'cach ...

  3. mysql执行事务的语句_详解MySQL执行事务的语法和流程

    摘要:MySQL 提供了多种存储引擎来支持事务. MySQL 提供了多种存储引擎来支持事务.支持事务的存储引擎有 InnoDB 和 BDB,其中,InnoDB 存储引擎事务主要通过 UNDO 日志和 ...

  4. MySQL 存储过程 经常使用语法

    MySQL 存储过程是从 MySQL 5.0 開始添加的新功能.存储过程的长处有一箩筐.只是最基本的还是运行效率和SQL 代码封装.特别是 SQL 代码封装功能,假设没有存储过程,在外部程序訪问数据库 ...

  5. 详解MySQL执行事务的语法和流程

    摘要:MySQL 提供了多种存储引擎来支持事务. MySQL 提供了多种存储引擎来支持事务.支持事务的存储引擎有 InnoDB 和 BDB,其中,InnoDB 存储引擎事务主要通过 UNDO 日志和 ...

  6. 详解mysql事务_详解MySQL执行事务的语法和流程

    摘要:MySQL 提供了多种存储引擎来支持事务. MySQL 提供了多种存储引擎来支持事务.支持事务的存储引擎有 InnoDB 和 BDB,其中,InnoDB 存储引擎事务主要通过 UNDO 日志和 ...

  7. Docker安装部署MongoDB及MySql和MongoDB的语法对比

    MongoDB是一个免费的.开源的.跨平台分布式面向文档存储的数据库,由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品 ...

  8. 用MySql的查询分析语法explain来优化查询和索引

    http://hi.baidu.com/wtnzone/item/beb83840a4971af4dd0f6c77 数据库最常见的操作就是查询了,我们经常要用"SELECT"语法对 ...

  9. mysql 语句块语法_MySQL ------ MySQL常用语句的语法 (三十四)

    MySQL常用的语句语法 注意:1. | 符号用来指出几个选中中的一个,因此NULL | NOT NULL 表示给出null 或 not null 2.包含在方括号中的关键字或子句是可选的(如 [li ...

最新文章

  1. 如何使用github托管项目---快速入门(菜鸟教程)
  2. python可以做什么开发-python适合做什么开发_python未来发展怎么样
  3. 日志打印的正确姿势!
  4. JQuery的无缝滚动
  5. c:if test=/c:if 使用
  6. REMarkerClusterer
  7. 9种深度学习算法简介
  8. OSChina 周日乱弹 —— 七哥的北漂日记
  9. Bootstrap 折叠插件
  10. SpringBoot整合kafka案例
  11. vue调用const_2020年Vue的这些面试题你会吗?
  12. 中国荔枝市场趋势报告、技术动态创新及市场预测
  13. C#序列化出现“因其保护级别而不可访问。只能处理公共类型。”
  14. Javaweb 网上订餐系统
  15. VC编程实现运行Excel宏 Run
  16. 函数的梯度方向和切线方向_导数、方向导数与梯度
  17. ListView 仿QQ微信侧滑出现删除按钮
  18. 与时间和频率测量有关的一些重要概念(抖动,游走,MTIE、TDEV)
  19. Parameter... parameter
  20. 技术分享 | Goby IP库初探

热门文章

  1. vscode 支持 markdown 流程图
  2. 计算机ip地址配置参数,指定电脑的IP地址和DNS等参数配置方法
  3. mysql mvcc 隔离级别_关于 Mysql 四种隔离级别中 Lock 和 MVCC 的关系
  4. 【OS学习笔记】八 实模式:编写主引导扇区代码-另一种更高效的写法
  5. 剑指offer——二进制中1的个数(c++)
  6. GAN 的推导、证明与实现。
  7. SQLServer之创建非聚集索引 1
  8. Python_面向对象_zipfile和tarfile
  9. Android项目实战(二十二):启动另一个APP or 重启本APP
  10. 小米手机无法连上WIFI网络的解决方案