DML操作报列不存在?

MySQL数据库的DDL操作以及DML操作简介 数据库就是存储在硬盘上的格式化文件,通过一些手段可以很方便的这些文件进行增删改查简单来说 MySQL是关系型数据库 并且一张表数据可以达到千万行数据量,MySQL支持标准SQL语言。 阅读详情

DML操作报列不存在?

背景概述

客户在测试时发现执行某些DML语句时,出现了异常情况,报表不存在或者列不匹配的情况;

我在做数据迁移测试的时候也出现此问题,迁移数据时报 unknow column;

看到这种情况的时候很奇怪,查看表结构时也能看到当前执行的SQL语句涉及的表及列是存在的;

经过排查,最终发现当前这张表涉及触发器,报错的也不是这张表,而是其他表。

问题复现

本次测试基于 GreatSQL 8.0.32

1.创建测试表

greatsql> CREATE TABLE t1 (c1 int,c2 int,c3 int,c4 int);
greatsql> INSERT INTO t1 VALUES (1,1,1,1),(2,2,2,2),(3,3,3,3),(4,4,4,4);
greatsql> CREATE TABLE t2 (c5 int,c6 int,c7 int,c8 int);
greatsql> INSERT INTO t2 VALUES (1,1,1,1),(2,2,2,2),(3,3,3,3),(4,4,4,4);

2.创建触发器

# t2表不存在c1列
greatsql> CREATE TRIGGER test1
 after INSERT on t1
 FOR EACH ROW
 INSERT INTO t2(c1) values(NEW.c1);
Query OK, 0 rows affected (0.02 sec)

greatsql> CREATE TRIGGER test2
 after UPDATE on t1
 FOR EACH ROW
 UPDATE test.t2 SET c1=(NEW.c1)+1 WHERE c1=(NEW.c1);
Query OK, 0 rows affected (0.02 sec)

greatsql> CREATE TRIGGER test3
 after DELETE on t1
 FOR EACH ROW
 DELETE FROM t2 WHERE c1=(OLD.c1);
Query OK, 0 rows affected (0.02 sec)

# t3表不存在 
greatsql> CREATE TRIGGER test4
 before UPDATE on t2
 FOR EACH ROW
 INSERT INTO t3(c1) values(NEW.c5);
Query OK, 0 rows affected (0.00 sec)

可以看到在创建触发器的时候,不会去判断语句中涉及的表或者列是否存在。

3.执行测试SQL

greatsql> INSERT INTO test.t1 values (1,1,1,1);
ERROR 1054 (42S22): Unknown column 'c1' in 'field list'

greatsql> UPDATE test.t1 SET c1=110 WHERE c1=1;
ERROR 1054 (42S22): Unknown column 'c1' in 'field list'

greatsql> DELETE FROM  test.t1 WHERE c1=1;
ERROR 1054 (42S22): Unknown column 'c1' in 'where clause'

greatsql> UPDATE t2 SET c5=110 WHERE c5=1;
ERROR 1146 (42S02): Table 'test.t3' doesn't exist

此时报错c1列不存在,但没有显示是具体那张表的c1列,因此对我们产生误导,明明t1表存在c1列,但是还是报错c1列不存在;

4.故障排查

遇到上述问题时,我们可以打开通用日志,观察一下日志中记录的语句

shell> tail -f general5000.log
...
2024-10-14T16:21:16.837007+08:00         2651 Query     INSERT INTO test.t1 values (1,1,1,1)
2024-10-14T16:21:16.839500+08:00         2651 Query     INSERT INTO t2(c1) values(NEW.c1)
...

可以看到当我们执行了 INSERT INTO test.t1 语句后紧接着自动执行 INSERT INTO t2(c1) 语句,因为t2表没有c1列,所以报错 Unknown column 'c1'。

5.查看当前表涉及的触发器

greatsql> SELECT TRIGGER_SCHEMA,TRIGGER_NAME,EVENT_OBJECT_SCHEMA,EVENT_OBJECT_TABLE,ACTION_STATEMENT FROM INFORMATION_SCHEMA.TRIGGERS WHERE EVENT_OBJECT_TABLE='t1';
+----------------+--------------+---------------------+--------------------+----------------------------------------------------+
| TRIGGER_SCHEMA | TRIGGER_NAME | EVENT_OBJECT_SCHEMA | EVENT_OBJECT_TABLE | ACTION_STATEMENT                                   |
+----------------+--------------+---------------------+--------------------+----------------------------------------------------+
| test           | test1        | test                | t1                 | INSERT INTO t2(c1) values(NEW.c1)                  |
| test           | test2        | test                | t1                 | UPDATE test.t2 SET c1=(NEW.c1)+1 WHERE c1=(NEW.c1) |
| test           | test3        | test                | t1                 | DELETE FROM t2 WHERE c1=(OLD.c1)                   |
+----------------+--------------+---------------------+--------------------+----------------------------------------------------+
3 rows in set (0.00 sec)

当出现上面的问题时,可以查看一下这张表是否涉及触发器;如果涉及则检查一下对应触发器的ACTION_STATEMENT字段中的SQL语句涉及的表是否包含报错的字段。

总结

如果出现在执行DML操作时报错,并且报错跟当前表没有什么关系时可以考虑是否有触发器与当前表有关联,检查一下触发器中涉及的SQL语句.

Enjoy GreatSQL :)

关于 GreatSQL

GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

image

社区有奖建议反馈: https://greatsql.cn/thread-54-1-1.html

社区博客有奖征稿详情: https://greatsql.cn/thread-100-1-1.html

(对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~)

技术交流群:

微信&QQ群:

QQ群:533341697

微信群:添加GreatSQL社区助手(微信号:wanlidbc )好友,待社区助手拉您进群。

30、电力生产系统中的效率测量 本文探讨了如何使用数据包络分析(DEA)模型来评估电力生产系统的效率。文章详细介绍了电力生产系统的三个主要环节——发电、输电和配电,并通过多种DEA模型,如输入导向模型、输出导向模型以及基于松弛的SBM模型,展示了效率测量的方法和技术。同时,结合实际案例分析,说明了DEA模型在识别效率低下环节及提出改进建议方面的应用价值。 阅读详情

相关推荐

(35)远程识别(又称无人机识别)(一)

Ardupilot官网关于《Peripheral Hardware》的翻译 —《(35) 远程识别(又称无人机识别)》。

无人机开发(开源Ardupilot) 4万+

关于ora-24381异常出现的情况

该异常只是在使用forall的时候、并且使用SAVE EXCEPTIONS保存异常信息时:若其中异常为DML异常才会爆出   如下例子:   例一这种情况不会爆出该异常   declare TYPE num_t ISTABLEOFNUMBER; num num_t:=num_t(1,2,3); i NUMBER; BEGIN   i:='a'; FORALL i IN

zj0078的专栏 2万+

Altium Designer 16来自原理图/PCB的各种报错 (持续更新):

NO1.Nets with only one pin: 根本原因: 在BGA的原理图绘制时,我一般习惯拉出该元件的所有IO的网络,这方便利于我开发其他款板卡。同样也会因为不同板卡的需求不同而造成有些IO并没有使用到,也就是整个原理图中only one pin。 解决方案: 鼠标右键工程文件>工程参数>下图圈中的选项将“错误”更改为“警告/不报告” ...

优快云@猿谷攻城狮 1万+

DML错误日志表

前天写了篇文章《表中已存重复数据的情况,如何增加唯一性约束?》,提到了存在唯一约束前提下,重复数据的问题。很感谢建荣兄,他给我补充了两点,1. 冲突数据也可以考虑通过errorlog的方式,可以很快定位。2. 对于含有null的复合索引,mysql和oracle的结果完全不同。对于第二点,前同事曌哥,碰巧也说到了,MySQL下和Oracle的些许不同,这块我需要验证下,才能体会得更清楚些。对于第一

bisal的专栏 1730

斯坦福大学CS224d基础1:线性代数知识

本文为斯坦福CS229的内容,也是CS224d课程的背景数学知识。概括了在机器学习和深度学习中用到的大部分线性代数知识。为了便于大家查漏补缺,这里根据英文版本整理了一个中文版本。

龙心尘 2万+

利用netmq在相机应用于unity之间传输图像数据

Unity工业相机接入方案解析 本文探讨了在Unity中接入不同品牌工业相机的技术方案。研究发现: Basler相机可直接调用官方DLL(pylonc.net.dll)实现接入 海康和大恒相机因驱动DLL依赖C++组件,无法直接调用 解决方案:通过独立进程(相机应用程序)与Unity进行通信,采用NetMQ实现图像数据传输 技术实现要点: 相机端:使用PublisherSocket发布JPEG图像帧 Unity端:通过SubscriberSocket订阅图像数据 优化:设置高水位线控制缓存帧数,避免数据堆积

weixin_46450859的博客 417

泛微OA_E9_流程流转集成(DML)_1_1709

2. **接口类型对比** - **DML接口**:需管理员具备SQL编写能力,功能较基础。3. **DML接口配置步骤** - **前提条件**:需先新建外部数据源(非OA自有数据需额外配置)。- **关键配置项**: - 名称、表单选择、数据源(OA或第三方)、DML类型(Insert/Update/Delete/自定义SQL)。- **注意事项**: - OA自有表涉及权限时,不建议使用DML接口。4. **应用与测试** - **应用场景**:流程表单的节点签批或出口条件中调用DML接口。

泛微OA学习资料包括: 1、内部完整教学视频近2000部,覆盖各类别、各场景、各模块等; 2、各类前后端开发技术文档,包括:入门教程资料、前后端二次开发资料、接口文档等。 涵盖产品:E10、E9、eteams、E8、E7、Emobile、通 851

RandLA-Net Tensorrt 推理 c++

RandLA-Net 实现 Tensorrt 部署.

J。 1109

【泛微OA】泛微 e-cology 表单配置:让天数随有效期自动更新的实用指南

摘要:本文详细介绍了如何在泛微e-cology系统中实现表单字段自动更新功能,以"设备校准管理表"的"校准剩余天数"字段为例。通过配置建模引擎的提醒模块,编写DML语句计算当前日期与有效期的差值,并设置定时器实现每日自动更新。文章分步骤讲解了从模块入口到配置完成的完整流程,包括DML语句编写和定时器设置,同时提供了常见问题的排查方法。该方案可应用于合同管理、资质到期等多种需要字段自动更新的业务场景,有效减少人工操作,确保数据准确性。(150字)

衍生星球的博客 4482

YOLOv8改进,YOLOv8添加可变性卷积DCNv2

DCNv2对原始的DCNv1进行了改进,可变形卷积网络的卓越性能源于其适应对象几何变化的能力。通过对其自适应行为的检查,虽然对其神经特征的空间支持比常规的ConvNets更接近于对象结构,但这种支持可能远远超出感兴趣区域,导致特征受到不相关图像内容的影响。为了解决这个问题,我们提出了一种可变形卷积网的重新表述,通过提高建模能力和更强的训练,提高了其专注于相关图像区域的能力。通过更全面地集成网络中的可变形卷积,并引入扩展变形建模范围的调制机制,增强了建模能力。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3606

windows在使用ping 127.0.0.1时出现一般故障的解决方案

本文主要介绍了windows在使用ping 127.0.0.1时出现一般故障的解决方案,希望能对使用windows的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 7万+

SYS_NC00002$之类的列

尽管知道这种列是怎么回事(最后发现还是忽略了default列)。当查询相关视图的时候,函数索引不存在,主键不存在,虚拟列不存在。一直不太了解这个列是怎么产生的,函数索引?曾经怀疑过是基于函数的索引,drop索引后遗留的问题,实际测试后,发现不是这个问题。但是还是有一个列的问题,导致思考了很久,查了很多文档,然后终于明白大约怎么回事。我的疑问,我的测试环境中的SYS_NC00002$列,是怎么产生的?看来还真是default列产生的虚拟列。ORA-14148 ,这个列是保护的列。

文档搬运工 257

基于STM32L4XX、HAL库的 TMC2660C-PA 驱动程序设计

/ 默认灵敏度和电流。// 20/31最大电流。

zhusl6688的博客 384

[mysql]mysql的DML数据操作语言增删改,以及新特性计算列,阿里巴巴开发手册mysql相关

1DML数据操作语言,8.0新特性计算列

qq1021091799qq的博客 1854

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数据操作语言 - DML

本文关键字:数据库、数据操作语言、DML。之前我们已经了解了SQL语言的分类,可以划分为:DDL(数据定义语言)、DML(数据操纵语言)、DQL(数据查询语言)、DCL(数据控制语言)、TPL(事务处理语言)、CCL(指针控制语言),本文将介绍DML。

微光点亮星辰 8757

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ORA-14148: guard 列不允许直接执行 DML 和 DDL 操作

在查询表所有列,然后通过列信息插入数据时,出现ORA-14148: guard 列不允许直接执行 DML 和 DDL 操作,经查找分析,问题出现在隐藏列上。 在oracle12c环境下,数据表新增带有default值且允许为空的数值字段时,会创建隐藏列 通过sql select column_id, column_name, data_type, data_length, data_default, hidden_column from user_tab_cols 来查询表的所有列时,可看到hidden_

hiemianshusheng的博客 1307

MySQL的DML增删改操作:

本文介绍了MySQL数据库操作语言(DML)的基本使用方法,包括数据添加、更新和删除操作。重点讲解了两种数据添加方式:单条插入和多条批量插入,并比较了它们的效率差异。同时详细说明了UPDATE和DELETE语句的使用方法及注意事项,特别强调了WHERE子句的重要性。文章还介绍了MySQL8.0的新特性计算列,该功能允许通过表达式自动生成列值。最后对比了DELETE和TRUNCATE TABLE的区别,指出后者虽然效率更高但不支持回滚,建议谨慎使用。这些操作在实际应用中可能因约束条件导致失败,使用时需特别注意

HMBBLOVEPDX的博客 1020

oracle 视图dml,Oracle视图可以进行DML操作的条件

条件一:在连接视图中不能有Order by、Group by、connetc by等语句排序语句。条件二:基础表中所有的NOT NULL列都必须在这个视图中。条件三:需要更新的列不是虚拟列。条件四:不能够具有分组函数。除了以上几个限制条件之外,若需要在视图上进行DML操作的话,则在建立视图的Select语句中,还不能够有集合运算符、子查询等等。以上这些是一些必须要满足的基本条件,缺一不可。否则的话...

weixin_31041421的博客 557

MySQL DML操作指南

场景问题:在一个电子商务网站的后台管理系统中,数据库负责存储大量的商品信息、用户订单和库存数据。随着业务的发展,数据库中的数据量急剧增加,管理员需要定期进行数据的增删改查操作以维护数据的准确性和时效性。然而,由于缺乏对数据操纵语言(DML)的深入了解,管理员在执行数据操作时常常遇到错误,如数据不一致、更新失败等问题,这不仅影响了工作效率,还可能对用户体验造成负面影响。知识点重要性:介绍MySQL知识点之数据操纵语言(DML)的概述至关重要,因为它直接关系到数据库中数据的正确性和完整性。

JavaCodePro的博客 855

视图进行DML操作的一些限制条件

在公司培训,复习到了一些数据库的知识,今天接触到了视图这一块,视图是能进行DML操作的,但有些限制条件下却不能,为了深入了解一下这方面的知识,搜索了相关大牛的内容,现对其进行了总结,供自己及大家学习。 数据库视图是表的一个延伸对象。从理论上来说,在视图上使用DML语句对数据进行更新,最终都会在基础表上完成。也就是说,可以通过视图对基础表的内容进行修改。但是,往往没有这么简单。若想在连接视图上

2040

【DML(数据操作语言):数据库操作的基础】

数据操作语言(DML)是 SQL 中用于操作数据库数据的基础工具,涵盖了查询、插入、更新和删除等基本操作。在实际应用中,合理地使用 DML 语句,结合事务控制和性能优化技巧,可以帮助开发者高效、安全地处理数据库数据。无论是进行简单的数据查询,还是复杂的批量数据处理,DML 都是每个数据库开发人员必须掌握的重要工具。随着大数据应用和分布式数据库系统的发展,DML 的应用场景更加广泛,如何高效、安全地执行 DML 操作将成为数据库优化和应用设计的核心问题之一。

2501_90373042的博客 1248

Oracle 视图可以DML操作的条件

Oracle 视图可以DML操作的条件  条件一:在连接视图中不能有Order by、Group by、connetc by等语句排序语句。 条件二:基础表中所有的NOT NULL列都必须在这个视图中。 条件三:需要更新的列不是虚拟列。 条件四:不能够具有分组函数。 除了以上几个限制条件之外,若需要在视图上进行DML操作的话,则在建立视图的Select语句

aryiwo的专栏 603

MySQL——DML操作(插入、修改、删除、查询数据)

MySQL——DML操作(插入、修改、删除、查询数据) 知识大纲 DML概念 插入数据 修改数据 删除数据 查询数据 DML[数据操纵语言] DML [Data Manipulation Language] DML 用于插入、修改、删除数据记录,包括如下 SQL 语句: INSERT:添加数据到数据库中 UPDATE:修改数据库中的数据 DELETE:删除数据库中的数据 插入数据 语法 INSERT INTO 表名称 VALUES(值 1,值 2,……); -- 1:[按建表列顺序]直接插入所有列

qq_45938466的博客 2513

MySQL详解之DML(数据操作语言)

在数据库管理中,DML(数据操作语言)用来进行数据的查询、插入、更新和删除操作,是我们与数据交互的核心。对于新手来说,了解这些命令的正确用法和常见的错误,可以帮助你提升数据库操作的效率。本文将对MySQL中的DML进行详细解读,同时指出新手常见的坑,助你在数据库的世界中更加游刃有余。通过本文的介绍,希望你能对MySQL中的DML(数据操作语言)命令有一个清晰的理解。:在编写查询时,确保使用参数化查询,避免SQL注入漏洞,特别是在处理用户输入时。:在插入数据时,确保提供非空字段的值,若未提供,将引发错误。

yfmsx的博客 1255
上一篇: 【GreatSQL优化器-05】条件过滤condition_fanout_filter
下一篇: 使用 gt-checksum 迁移表结构到 GreatSQL
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值