mysql savepoint语法_SAVEPOINT语法错误一例
前几天帮同事解决一个案例,在主从复制环境下,从库上的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语法错误一例相关推荐
- mysql savepoint作用_savepoint原理
保存点 在MySQL中, 保存点SAVEPOINT属于事务控制处理部分.利用SAVEPOINT可以回滚指定部分事务,从而使事务处理更加灵活和精细.SAVEPOINT相关的SQL语句如下 SAVEPOI ...
- mysql中的删除语法错误_mysql – EXPLAIN中的SQL语法错误
我试图让一个解释命令在 mysql中工作.我正在尝试解决此删除查询的性能问题: DELETE FROM boost_cache_relationships WHERE base_dir = 'cach ...
- mysql执行事务的语句_详解MySQL执行事务的语法和流程
摘要:MySQL 提供了多种存储引擎来支持事务. MySQL 提供了多种存储引擎来支持事务.支持事务的存储引擎有 InnoDB 和 BDB,其中,InnoDB 存储引擎事务主要通过 UNDO 日志和 ...
- MySQL 存储过程 经常使用语法
MySQL 存储过程是从 MySQL 5.0 開始添加的新功能.存储过程的长处有一箩筐.只是最基本的还是运行效率和SQL 代码封装.特别是 SQL 代码封装功能,假设没有存储过程,在外部程序訪问数据库 ...
- 详解MySQL执行事务的语法和流程
摘要:MySQL 提供了多种存储引擎来支持事务. MySQL 提供了多种存储引擎来支持事务.支持事务的存储引擎有 InnoDB 和 BDB,其中,InnoDB 存储引擎事务主要通过 UNDO 日志和 ...
- 详解mysql事务_详解MySQL执行事务的语法和流程
摘要:MySQL 提供了多种存储引擎来支持事务. MySQL 提供了多种存储引擎来支持事务.支持事务的存储引擎有 InnoDB 和 BDB,其中,InnoDB 存储引擎事务主要通过 UNDO 日志和 ...
- Docker安装部署MongoDB及MySql和MongoDB的语法对比
MongoDB是一个免费的.开源的.跨平台分布式面向文档存储的数据库,由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品 ...
- 用MySql的查询分析语法explain来优化查询和索引
http://hi.baidu.com/wtnzone/item/beb83840a4971af4dd0f6c77 数据库最常见的操作就是查询了,我们经常要用"SELECT"语法对 ...
- mysql 语句块语法_MySQL ------ MySQL常用语句的语法 (三十四)
MySQL常用的语句语法 注意:1. | 符号用来指出几个选中中的一个,因此NULL | NOT NULL 表示给出null 或 not null 2.包含在方括号中的关键字或子句是可选的(如 [li ...
最新文章
- 如何使用github托管项目---快速入门(菜鸟教程)
- python可以做什么开发-python适合做什么开发_python未来发展怎么样
- 日志打印的正确姿势!
- JQuery的无缝滚动
- c:if test=/c:if 使用
- REMarkerClusterer
- 9种深度学习算法简介
- OSChina 周日乱弹 —— 七哥的北漂日记
- Bootstrap 折叠插件
- SpringBoot整合kafka案例
- vue调用const_2020年Vue的这些面试题你会吗?
- 中国荔枝市场趋势报告、技术动态创新及市场预测
- C#序列化出现“因其保护级别而不可访问。只能处理公共类型。”
- Javaweb 网上订餐系统
- VC编程实现运行Excel宏 Run
- 函数的梯度方向和切线方向_导数、方向导数与梯度
- ListView 仿QQ微信侧滑出现删除按钮
- 与时间和频率测量有关的一些重要概念(抖动,游走,MTIE、TDEV)
- Parameter... parameter
- 技术分享 | Goby IP库初探
热门文章
- vscode 支持 markdown 流程图
- 计算机ip地址配置参数,指定电脑的IP地址和DNS等参数配置方法
- mysql mvcc 隔离级别_关于 Mysql 四种隔离级别中 Lock 和 MVCC 的关系
- 【OS学习笔记】八 实模式:编写主引导扇区代码-另一种更高效的写法
- 剑指offer——二进制中1的个数(c++)
- GAN 的推导、证明与实现。
- SQLServer之创建非聚集索引 1
- Python_面向对象_zipfile和tarfile
- Android项目实战(二十二):启动另一个APP or 重启本APP
- 小米手机无法连上WIFI网络的解决方案