mysql 1054 42s22_MySQL 触发器的坑:ERROR 1054 (42S22): Unknown column 'xxx' in 'field list'
今天线上项目报错了 500 错误,Laravel 日志中显示
Illuminate/Database/QueryException with message 'SQLSTATE[42S22]:
Column not found: 1054 Unknown column 'is_charge' in 'field list'
(SQL: update `some_categories` set `lft` = case when `lft` >= 29 then `lft`+2 else `lft` end, `rgt` = case when `rgt` >= 29 then `rgt`+2 else `rgt` end where (`lft` >= 29 or `rgt` >= 29))'
即新增层级菜单的时候,更新历史节点的 left right 值报错。
但是,报错很诡异,SQL 语句中并没有 is_charge 出现,但是却一直报
Column not found: 1054 Unknown column 'is_charge' in 'field list'
这个错误很常见,以往都是因为线上数据表表没有同步新增字段,引起字段缺失。但是,完全不相关的 SQL 语句怎么会报出这个错误呢?
排除 Laravel 的问题
为了排除是 Laravel 的三方依赖问题,我直接在 MySQL 命令行中执行测试:
mysql> update some_categories set is_charge = 1 where id = 241;
ERROR 1054 (42S22): Unknown column 'is_charge' in 'field list'
mysql> update some_categories set type = 1 where id = 241;
ERROR 1054 (42S22): Unknown column 'is_charge' in 'field list'
果然,都是同样的错误,这么简单的 SQL 语句都会报错,说明不是单纯的 SQL 拼写错误。
我猜测是这个表有 MySQL 的触发器。
排查 MySQL 的触发器
SELECT * FROM information_schema.TRIGGERS \G;
果然找到了对应的触发器
TRIGGER_CATALOG: def
TRIGGER_SCHEMA: db1
TRIGGER_NAME: some_categories_insert
EVENT_MANIPULATION: INSERT
EVENT_OBJECT_CATALOG: def
EVENT_OBJECT_SCHEMA: db1
EVENT_OBJECT_TABLE: some_categories
ACTION_ORDER: 1
ACTION_CONDITION: NULL
ACTION_STATEMENT: BEGIN INSERT INTO db2.some_categories (id,name,type,link,page_id,page_id,parent_id,lft,rgt,depth,image,created_at,updated_at,is_charge) VALUES (NEW.i$,NEW.name,NEW.type,NEW.link,NEW.page_id,NEW.parent_id,NEW.lft,NEW.rgt,NEW.depth,NEW.image,NEW.created_at,NEW.updated_at,NEW.is_charge);
END
问题很明显了,对应的同步数据库 db2 里的对应表,缺少了 is_charge 字段。确认了一下,确实如此。
问题解决。
参考:https://bugs.mysql.com/bug.php?id=68715
战斗还没有结束
新增字段之后,不报之前的错误了。但是又出现了一个新的错误。
[2019-05-13 22:47:49] production.ERROR: SQLSTATE[21S01]:
Insert value list does not match column list:
1136 Column count doesn't match value count at row 1
(SQL: insert into `some_categories` (`name`, `parent_id`, `lft`, `rgt`, `updated_at`, `created_at`) values (测试测试, 225, 29, 30, 2019-05-13 22:47:49, 2019-05-13 22:47:49))
Column count doesn't match value count 这个错误也很容易理解,就是字段名列表跟值列表个数不匹配。检查了 SQL 没有问题,看来又是触发器的问题了。
在 MySQL 命令行下做了验证,确实如此
mysql> insert into some_categories (name, `type`) values ('test', 1);
ERROR 1136 (21S01): Column count doesn't match value count at row 1
晚上实在太困,到了凌晨,效率更低,愣是没看出触发器那里写错了字段。我决定先睡觉去。。。
今天一早,瞬间发现 page_id,page_id 写了两遍。。。
去掉一个之后,就恢复正常了。
结论
MySQL 排除 SQL 语句问题时,最好在 MySQL 命令行中进行。没有干扰。
触发器确实少用比较好,容易忘掉他的存在
MySQL 的提示确实不够友好。没有注明是触发器中的问题。感觉想尝试其他数据库了。
凌晨排查问题效率太低,不能指望人肉排查
mysql 1054 42s22_MySQL 触发器的坑:ERROR 1054 (42S22): Unknown column 'xxx' in 'field list'相关推荐
- mysql出现ERROR 1054 (42S22): Unknown column 'password' in 'field list'如何解决?
mysql中有一个系统默认的mysql数据库,里边有一个user权限表,在我学习到用户管理的时候使用了如下语句但是系统报错了. select host,user,password from user; ...
- Mysql问题 ERROR 1054 (42S22): Unknown column ‘password‘ in ‘field list‘
问题: 在mysql 5.7版本 修改mysql 用户密码: update mysql.user set password=password('root') where user='root' 提示出 ...
- wamp修改数据库默认密码时出现ERROR 1054 (42S22): Unknown column ‘password‘ in ‘field list‘
wamp3.1修改数据库默认密码时出现ERROR 1054 (42S22): Unknown column 'password' in 'field list' WAMP3.1安装好后,mysql密码 ...
- mysql 1054错误 Unknown column 'xxx' in 'field list'
出现问题的代码如下: s = '测试' sql = "INSERT INTO ffff(ID) VALUES (%s)" % (s) try:cursor.execute(sql) ...
- mysql1054错误——(1054, Unknown column 'xxx' in 'field list')
在使用scrapy框架连接数据库时遇到了1054错误 具体代码如下: try:self.cursor.execute('insert into qiubai(author,content) value ...
- Mysql5.7 解决 ERROR 1054 (42S22): Unknown column ‘password‘ in ‘field list‘
5.7版本与5.6版本的user表的区别 MySQL5.7中mysql.user表比MySQL5.6少了1个字段(Password) MySQL5.7中mysql.user表比MySQL5.6多了3个 ...
- mysql 更改root密码字段不存在_初次登陆MySQL修改密码是出现Unknown column 'password' in 'field list'的解决方法...
新安装的MySQL5.7,登录时提示密码错误,安装的时候并没有更改密码,后来通过免密码登录的方式更改密码,输入update mysql.user set password=password('roo ...
- MySQL使用报错:1054 - Unknown column ‘sno‘ in ‘field list‘(表中字段编码与SQL语句中编码不统一)
情况描述:在Navicat中新建了一个数据库,然后导入了几个CSV文件,建立了几个表: 其中sno_info结构如下所示: 当我简单查询Sno的时候: 报错了: 1054 - Unknown colu ...
- pymysql.err.OperationalError: (1054, “Unknown column ‘xxx‘ in ‘where clause‘“)问题解决方法
任务 向mysql数据库用户表中加入用户头像图片,一般16M以下的图片类型选择MEDIUMBLOB即可. 遇到问题 用pymysql向mysql插入图片数据时报错:pymysql.err.Operat ...
最新文章
- 训练不出结果_智能训练仪:专业化智能防控近视训练设备
- 参加UI培训就业多长时间
- 使用知乎「好物推荐」功能要注意什么?怎么使用? 关注问题 知乎指南 使用知乎「好物推荐」功能要注意什么?怎么使用?
- 地市级地铁数据管理信息系统解决方式
- SpringBoot简介、SpringBoot 入门程序搭建、与JDBC、Druid、Mybatis和SpringData JPA的整合
- 初识python教案青岛版八年级_青岛版信息技术六上第二单元第8课8.初识python教案...
- 增长黑客系列:今天比昨天增长多少?快使用环比函数来分析日志
- 【渝粤题库】广东开放大学 建设监理 形成性考核
- clientdataset 过滤 in_江门马弗过滤科技有限公司
- python学习--关注容易被忽略的知识点--(三)高级特性
- 小车手app安卓版下载_美森网校app下载_美森网校安卓版下载[英语培训]
- Java基础学习之画板1
- html 跑马灯效果 源代码,跑马灯效果.html
- CRC校验算法——C语言实现
- Eclipse Error Reporting (取消错误报告)
- repo sync x509: certificate is valid for,外部过滤器失败,smudge过滤器lfs失败,cannot initialize work tree
- java append函数_请详细说一下java中append()的方法.
- 【React】React Fiber
- matlab plot x y定义,plot是什么意思_matlab中plot(x)的是什么意思?
- 计算风险指标:最大回撤、计算风险收益指标:夏普比率、利用最大回撤和夏普比筛选基金、比较3只股票的夏普指数
热门文章
- 第3章 别碰白块(《C和C++游戏趣味编程》配套教学视频)
- html和ajax通信,使用Ajax与服务器(JSON)通信实例
- r语言岭回归参数选择_78-预测分析-R语言实现-岭回归与LASSO回归
- android命名管道创建使用
- IE和Windows系统中的彩蛋
- C++之父Bjarne Stroustrup:程序员在数学上付出的努力,永远也不会白费
- 对话MySQL之父:代码一次性完成才是优秀程序员
- 2021“科创中国”开源创新榜评选专家评审会在北京成功举办
- C 和 C++ 不安全?Android 支持 Rust 开发操作系统
- 加速编程效率,你不知道的IDEA功能设置