mysql执行SQL报错怎么办_mysql语句异常排查技巧

发布时间 - 2026-01-06 00:00:00    点击率:
ERROR 1064 表示 SQL 语法错误,主因是关键字拼错、标点遗漏、保留字未加反引号;sql_safe_updates=1 会静默拒绝无有效 WHERE 的 UPDATE/DELETE。

看到 ERROR 1064 就该先看 SQL 有没有拼错关键字

这是 MySQL 最常见的语法错误,本质是解析器在某个位置“看不懂”你写的 SQL。不是所有拼写错误都会报这个码,但绝大多数 ERROR 1064 都指向关键词、标点或保留字误用。

  • SELECT * FROM user WHERE name = '张三' ORDER BY id ASC LIMIT 10 OFFSET —— 后面漏了数字,会直接报 ERROR 1064
  • GROUP BY 写成 GROUPBY(少空格),或 INNER JOIN 写成 INNTER JOIN(多字母)
  • ordergrouprank 这类词当字段名却没加反引号:SELECT rank FROM users → 应写成 SELECT `rank` FROM users
  • MySQL 8.0+ 中 json 是保留字,CREATE TABLE t(json TEXT) 会失败,得写成 `json`

执行 UPDATE/DELETE 没生效?先确认是否启用了 safe mode

MySQL 默认开启 sql_safe_updates=1,它会拒绝没有 WHERE 条件或 WHERE 不含主键/索引列的修改语句——这不是报错,而是静默拒绝,容易让人误以为 SQL 执行成功了。

  • 检查当前设置:SELECT @@sql_safe_updates;,返回 1 表示启用
  • 临时关闭(仅当前会话):SET sql_safe_updates = 0;
  • 真正要改数据前,先用 SELECT 复现 WHERE 条件:SELECT id FROM orders WHERE status = 'pending' AND updated_at ,确认能查出预期行数再执行 UPDATE
  • 生产环境不建议全局关掉,可改用带主键的条件,比如 WHERE id IN (1001,1002,1003)

遇到 ERROR 1292:Truncated incorrect double/integer value

这说明你在对数值类型字段赋了非法值,比如把字符串塞进 INT 列,或把超长小数塞进 DECIMAL(5,2)。MySQL 5.7+ 默认严格模式下会直接报错,老版本可能只警告并截断。

  • 典型场景:INSERT INTO products(price) VALUES('99.99 USD'); → 字符串含非数字字符,触发 ERROR 1292
  • 排查方法:用 SELECT CAST('99.99 USD' AS DECIMAL) 测试转换结果,MySQL 会返回 0.00 并产生 warning
  • 修复方向:清洗数据(正则提取数字)、改用 VARCHAR 存原始值、或在应用层做类型校验
  • 注意:STR_TO_DATE() 解析失败也会报同类错误,例如 STR_TO_DATE('2025/13/01', '%Y/%m/%d')(13 月不存在)

事务里执行失败后,别忘了检查 autocommit 和 ROLLBACK 状态

很多异常看起来“没报错”,但数据不对,根源常在事务控制混乱。尤其 ORM 或脚本中手动 BEGIN 后忘记 COMMITROLLBACK

  • 确认当前连接是否自动提交:SELECT @@autocommit;0 表示关闭,需显式 COMMIT
  • 执行出错后,如果没 ROLLBACK,事务仍处于打开状态,后续语句可能被意外包含进去
  • SELECT trx_state, trx_started, trx_query FROM information_schema.INNODB_TRX; 查看未提交事务
  • 简单测试法:在命令行连上 MySQL,执行 BEGIN; INSERT ...; SELECT * FROM t;(查不到刚插的行)→ 说明还没提交,不是 SQL 问题,是事务卡住了

SQL 报错本身只是表象,背后往往是数据状态、会话配置、权限边界或事务生命周期没理清。盯着错误码看两眼,再查一次 SHOW WARNINGS;,比重写十遍 SQL 更管用。


# mysql  # js  # json  # sql语句  # sql  # Integer  # select  # Error  # 字符串  # int  # double  # 值类型  # delete  # 严格模式  # table  # 关键词  # 报错  # 会报  # 多字  # 塞进  # 主键  # 这是  # 让人  # 还没  # 拼错 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何安全更换建站之星模板并保留数据?  nginx修改上传文件大小限制的方法  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Laravel Session怎么存储_Laravel Session驱动配置详解  Laravel怎么连接多个数据库_Laravel多数据库连接配置  Laravel观察者模式如何使用_Laravel Model Observer配置  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  Linux系统命令中screen命令详解  北京企业网站设计制作公司,北京铁路集团官方网站?  网站页面设计需要考虑到这些问题  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  JavaScript实现Fly Bird小游戏  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  javascript中对象的定义、使用以及对象和原型链操作小结  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  如何快速上传自定义模板至建站之星?  LinuxShell函数封装方法_脚本复用设计思路【教程】  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  香港服务器租用每月最低只需15元?  如何在万网利用已有域名快速建站?  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  微信小程序 五星评分(包括半颗星评分)实例代码  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  使用spring连接及操作mongodb3.0实例  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  如何用好域名打造高点击率的自主建站?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  北京专业网站制作设计师招聘,北京白云观官方网站?  JavaScript模板引擎Template.js使用详解  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  如何用PHP工具快速搭建高效网站?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南