首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我在这个MySQL触发器中一直收到错误1172?

错误1172是MySQL中的一个常见错误,它表示在触发器中使用了不允许的自引用。自引用是指在触发器中引用了正在被触发的同一张表。

MySQL触发器是一种在表上定义的特殊类型的存储过程,它会在特定的数据库操作(如插入、更新、删除)发生时自动执行。触发器可以用于实现数据的约束、业务逻辑的处理以及数据的变化跟踪等功能。

错误1172通常发生在以下情况下:

  1. 在触发器中使用了UPDATE语句,并且更新的字段与触发器所在的表中的字段相同。
  2. 在触发器中使用了INSERT语句,并且插入的字段与触发器所在的表中的字段相同。
  3. 在触发器中使用了DELETE语句,并且删除的字段与触发器所在的表中的字段相同。

这些操作会导致触发器无限递归地触发自身,从而引发错误1172。

要解决这个问题,可以采取以下几种方法:

  1. 避免在触发器中使用自引用。如果需要在触发器中引用同一张表,可以考虑使用其他方式来实现相同的功能,如存储过程或函数。
  2. 检查触发器中的SQL语句,确保没有引用正在被触发的同一张表。
  3. 检查触发器的逻辑,确保没有出现无限递归的情况。
  4. 如果触发器中确实需要引用同一张表,可以考虑使用临时表或者其他方式来避免自引用的问题。

腾讯云提供了MySQL数据库的云服务,可以使用腾讯云的云数据库MySQL来搭建和管理MySQL数据库。腾讯云云数据库MySQL是一种高性能、可扩展的关系型数据库服务,提供了自动备份、容灾、监控等功能,适用于各种规模的应用场景。

腾讯云云数据库MySQL产品介绍链接地址:https://cloud.tencent.com/product/cdb_mysql

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL基础篇1 mysql的基础架构

-h$ip -P$port -u$user -p 连接命令mysql是客户端工具, 用来与服务器建立连接, 连接的方式也是tcp, 认证用户名和密码 如果用户名或密码不对,你就会收到一个"Access...,下次查询再重新建立 由于建立连接比较复杂, 尽量减少连接动作, 建议尽量使用长连接 问题是, 全部使用长连接,mysql占用内存会很大, 因为mysql执行过程临时使用的内存是管理连接对象里面的...,然后将字符串"T"识别为"表名T",将"字符串ID"识别成"列ID" 语法分析:语法分析器会根据语法规则,判断你输入的这个sql语句是否满足mysql语法 如果语句不对,会收到错误提示 image.png...原因是因为sql语句要操作的表不只是sql字面上哪些, 比如有个触发器, 只有执行过程才能确定 大白话 连接器:门卫,想进请出示准入凭证(工牌、邀请证明一类)。...臣妾做不到” 优化器:“要A B两个办公室找张三和李四啊?

74450
  • Zabbix监控虚拟机服务-告警与自动恢复

    zabbix=5.0&os_distribution=centos&os_version=7&db=mysql&ws=apache 其中有一步是安装mysql,参考的笔记,单节点即可:https://...注意:主机名称一定要和zabbix_agentd.conf配置的完全一样,太鸡肋 然后就发现,为什么新加入的agent状态是未知的呢 ? 经过测试,给主机增加对应的template ?...---- 服务的监控与恢复 首先192.168.1.4上安装了docker服务,下面我们就通过zabbix来监控docker服务的状态,若异常产生告警并自动恢复 1.创建监控项:就用自带的system.run...但是这个告警会一直存在,因为服务没有自动恢复 下一步就是配置自动恢复,自动恢复动作配置即可 ? ? ? ?...这里修正下,今天再测试另外环境时发现自动恢复时出现错误:Cannot obtain authentication methods: Would block requesting userauth list

    1.5K20

    干货视频|解析Zabbix5.0重要新功能点的底层原理

    例如,galera数据库的复制,我们知道MySQL8是数据库集群最广泛的呈现方式。它们数据库内部的所有表格都必须使用主键。但是,Zabbix数据库,并非所有表格都具有主键。...当我们将该值发送到Zabbix server时,Zabbix server日志文件,我们会收到很多查询失败的错误消息。因为我们的主键违规。...如果proxy停机的话,你将不会收到这些事件风暴。那么,如果有同样的设置但是想接收那些5000条通知怎么办?是的,主要的问题还是proxy,仍然没有从那5000个agent那里接收到数据。...因此,新版本这个问题的解决方案变得非常简单。...如果我们谈论的是常规监控项,那么就是一个错误,造成一个无法正常工作的监控项,但如果我们说的是低级别自动发现,我们一个监控项原型中出现一个拼写错误这个监控项应用在模板,模板应用于成千上万的主机,那么我们就会收到成千上万个不支持的监控项

    85920

    数据库(七)

    触发器是一段与表有关的 mysql 程序,当这个某个时间点发生了某种事件时,将会自动执行相应的触发器程序。...何时使用触发器 当我们想要在一个表记录被更新时做一些操作时就可以说使用触发器,但是完全可以 python 来完成这个事情。...使用触发器 案例 有 cmd 表和错误日志表,需求: cmd 执行失败时自动将信息存储到错误日志表。...原子性:一个事务(transaction)的所有操作,要么全部完成,要么全部不完成,不会结束中间某个环节,事务执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样...存储过程是一组任意的 sql 语句集合,存储 mysql ,调用存储过程时将会执行其包含的所有 sql 语句,与 python 的函数类似。 为什么使用存储过程?

    81720

    就想加个索引,怎么就这么难?

    ❝领导让SQL优化,直接把服务干挂了...❞ 前言 MySQL大表加字段或者加索引,是有一定风险的。 大公司一般有DBA,会帮助开发解决这个痛点,可是DBA是怎么做的呢?...请求接口报错图 这个时候,调用接口已经报错了,响应时间也比较久。此时,服务对用户来说,已经基本不可用了。 为什么会这样? ❝就想加个索引,怎么就这么难?...首先我们要知道,InnoDB事务,锁是需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。这个就是两阶段锁协议。...我们发现,DDL操作之前如果存在长事务,一直不提交,DDL操作就会一直被堵塞,还会间接的影响后面其他的查询,导致所有的查询都被堵塞。 这也就是为什么我们把服务干挂的原因了。...原表上创建3个与insert delete update对应的触发器,用于copy数据的过程原表的更新操作,更新到新表。

    48310

    A关联B表派生C表 C随着A,B 的更新而更新

    摘要: 本篇写的是触发器和外键约束 关键词: 触发器 | 外键约束 | 储存表链接更新 | Mysql 之所以用这个标题而没用触发器或者外键约束的原因, 1、是因为在做出这个需求之前博主是对触发器和外键约束丝毫理不清楚的...——因为同样是这波弯路 省了触发器里一条语句,极大的提高了触发器的效率,重点是看到有文章说触发器里写select容易崩,而我又不得不写select 所以能省一笔就省一笔吧,具体怎么省的,写完正确解决这个需求的方法后文末会提及...解决办法:——触发器 百度大佬的帮助下终于回归正途,触发器,插入时候触发更新 DELIMITER // CREATE TRIGGER test_tri AFTER INSERT ON test FOR...DELIMITER和自定义字符,顺带着衍生出了 坑②:虽然跑的通,触发器的效果也杠杠滴,但是看着 这个错误代码四个大字还是有点儿不安,不知道是解释器的问题还是什么问题,最终结果就是百般测试下没有问题才放心...文末彩蛋: 上面说的为什么外键约束省了一大波空间?

    1K10

    MySQL常见的几个错误汇总

    参考自:http://www.blogjava.net/xiaomage234/archive/2014/07/25/416200.html 案例1、在线DDL报错提示日志空间不足 MySQL 往一张大表添加字段时报如下错误...解决方法: 的数据库为MySQL 5.5版本,innodb_online_alter_log_max_size值为默认大小128M。...stop STEP 04) rm -f /var/lib/mysql/ib_logfile* STEP 05) service mysql start 案例3、pt-osc加字段时候报错: 收到错误如下...,针对相应的设置进行处理; 2) 创建一个新的表,表结构修改后的数据表,用于从源数据表向新表中导入数据; 3) 创建触发器复制数据开始之后,将对源数据表继续进行数据修改的操作记录下来,以便在数据复制结束后执行这些操作...; 7) 删除触发器

    1.4K30

    Mysql begin..end使用遇到的坑

    = 3 and biz_type = 1 AND sub_biz_type = 101 AND delete_flag = 0), 2), 0) as money; END 如图,下面mysql...执行了这段sql,本来是想要查询店铺订单的客单价的,然后执行sql的过程,抛了You have an error in your SQL syntax; check the manual that...default '2021-05-06 00:00:00'' at line 3 这个异常告诉sql语法错误 开始一直以为是自己定义局部变量的时候,出了问题。...后来发现以上语句触发器或者存储过程是可以正确执行的。 查看相关文档和网上资料中得知: 通常begin-end用于定义一组语句块,各大数据库的客户端工具可直接调用,但在mysql不可用。...begin-end、流程控制语句、局部变量只能用于函数、存储过程内部、游标、触发器的定义内部。

    1.4K40

    MySQL触发器的详细教学与实战分析

    # 设置MySQL执行结束标志,默认为;2delimiter // 五、触发器的基本使用 5.1 基本使用步骤 首先,先展示一下创建的两张表,因为创建的表很简单,这里没有提供库表操作的SQL命令。...oracle,for each row如果不写,无论update语句一次影响了多少行,都只执行一次触发事件。 而MySQL,不支持语句级触发器,所以MySQL并不需要在意。...七、触发器引用行变量 7.1 old和new对象语法 触发目标上执行insert操作后会有一个新行,如果在触发事件需要用到这个新行的变量,可以用new关键字表示 触发目标上执行delete操作后会有一个旧行...如果我们触发器的时候,将添加学生、删除学生和删除班级的触发器都写在一个查询模板。你会发现当你删除班级的时候,会报错。显示如下信息: 这是为什么呢?...由于触发器写起来比较隐蔽,容易被开发人员忽略,而且隐式调用触发器不易于排除依赖,对后期维护不是很友好! 所以开发触发器是很少用到的。那为什么还花时间大篇幅的讲解MySQL触发器呢?

    1.3K10

    MySQL 8.0.12 有什么新内容?

    到今年7月底,MySQL 8.0.12版本发布,从官方的release note里面,选取出来认为的重点内容,在这里展开聊一下。...,估计很多人都知道这个参数,这个参数之前有个算是比较蛋疼的问题:如果 sql 会话,执行 sql 需要进行file sort,那么 mysql 就会给当前回话直接分配 sort_buffer_size...MySQL 的 DDL一直是非常出名的问题,社区与官方都在这个问题上投入了很大的精力,从最早 percona 的 toolkit 里面带的 pt-osc(这个基于触发器实现的在线改表,由于 MySQL...早年单表只支持一个触发器,为了避免无法使用 pt-osc,有了早年一直流传到现在的 MySQL重大守则之一:不许使用触发器),到 github 发布的 gh-ost(基于 row 格式 binlog),...MySQL 外键关联删表: 8.0,版本,普通情况下,删除父表: ? 报错 3730 更早的版本(5.7): ? 可以看出错误信息, 8.0 开始更加详细了。

    93910

    mysql 触发器介绍「建议收藏」

    大家好,又见面了,是你们的朋友全栈君。 触发器(Trigger)是 MySQL 中非常实用的一个功能,它可以操作者对表进行「增删改」 之前(或之后)被触发,自动执行一段事先写好的 SQL 代码。...本教程带领大家在实践中学习,你将学到触发器实际应用场景的重要应用。 在这个教程客户管理系统。...这三类操作都可以使用 MySQL 触发器来实现。 下面将详细讲解触发器全部六种情况: BEFORE INSERT : 插入数据前,检测插入数据是否符合业务逻辑,如不符合返回错误信息。...[表名]:将这个触发器与数据库的表进行关联,触发器定义表上,也附着表上,如果这个表被删除了,那么这个触发器也随之被删除。...这个触发器用于监测操作者写入 sales 表的 sales_amount 值时,这个值是否大于 10000 ,如果大于,那么返回错误信息进行报错。

    73020

    MySql 入门到精通-sql查询语句的执行过程,你真的知道吗?

    MySQL 基本架构 首先,我们来看一下 MySQL 的基本架构图,通过这个示意图我们就能很清楚的知道 sql 语句 mysql 的各个模块是如何执行的。 ?...MySql 的大部分核心功能都在这一层完成的,像它的所有内置函数,比如时间函数和日期函数等,也就是说所有的跨存引擎的功能均是 Server 这层去实现,比如,视图、触发器以及存储过程等。...这个时候有些同学可能就会有疑问,由于 MySQL 执行过程临时使用的内存是管理连接对象里面的,如果全部使用长连接的话,有时就会出现 MySql 内存紧张,如果内存占用太大就会出现 OOM ,表现出来的就是出现...如果我们的 SQL 语法写的不对的话,就会收到这样的一条错误提示 “You have an error in your SQL syntax”,如下, select 写成了elect: mysql>...; 然后,取 “下一行”,重复之前的判断逻辑,一直取到这个表的最后一行。

    1.1K30

    MySQL 8.0.12 有什么新特性?

    到今年7月底,MySQL 8.0.12版本发布,从官方的release note里面,选取出来认为的重点内容,在这里展开聊一下。...,这个参数之前有个算是比较蛋疼的问题:如果 sql 会话,执行 sql 需要进行file sort,那么 mysql 就会给当前回话直接分配 sort_buffer_size大小的内存出来。...MySQL 的 DDL一直是非常出名的问题,社区与官方都在这个问题上投入了很大的精力,从最早 percona 的 toolkit 里面带的 pt-osc(这个基于触发器实现的在线改表,由于 MySQL...早年单表只支持一个触发器,为了避免无法使用 pt-osc,有了早年一直流传到现在的 MySQL重大守则之一:不许使用触发器),到 github 发布的 gh-ost(基于 row 格式 binlog),...MySQL 外键关联删表: 8.0,版本,普通情况下,删除父表: 报错 3730 更早的版本(5.7): 可以看出错误信息, 8.0 开始更加详细了。

    1.1K00

    一条SQL语句是如何执行的?

    触发器、视图等。...如果用户名或密码不对,你就会收到一个"Access denied for user"的错误,然后客户端程序结束执行。 如果用户名密码认证通过,连接器会到权限表里面查出你拥有的权限。...如果在连接被断开之后,客户端再次发送请求的话,就会收到一个错误提醒: Lost connection to MySQL server during query。...但是全部使用长连接后,你可能会发现,有些时候 MySQL 占用内存涨得特别快,这是因为 MySQL 执行过程临时使用的内存是管理连接对象里面的。这些资源会在连接断开的时候才释放。...如果你的语句不对,就会收到“You have an error in your SQL syntax”的错误提醒,比如下面这个语句 select 少打了开头的字母“s”。 4.

    1.1K50

    MySql基础架构(sql查询语句MySql内部具体是怎么执行的?)

    提出问题: 对于一个做后台不久的,起初做项目只是实现了功能,所谓的增删改查,和基本查询索引的建立。直到有一个面试官问我一个问题,一条sql查询语句mysql数据库具体是怎么执行的?...被虐了,很开心,感谢他。于是开始了深入学习mysql。本篇文章通过 一条sql查询语句mysql数据库具体是怎么执行的? 来具体讲解mysql的基础架构。...如果在连接被断开之后,客户端再次发送请求的话,就会收到一个错误提醒: Lost connection to MySQL server during query。...如果语法不对,会收到“You have an error in your SQL syntax”的错误提醒。...第一次调用的是“取满足条件的第一行”这个接口,之后循环取“满足条件的下一行”这个接口,这些接口都是引擎已经定义好的。 总结 到此,一条查询语句mysql架构执行基本流程进行了一个大概的讲解。

    5.6K20

    mysql--触发器复习

    3.删除触发器 触发器应用 错误情况 同时,如果在触发器中出现错误,那么前面的已经执行的操作也会全部清空 注意事项 ① mysql触发器不能对同一张表进行修改操作 因此说明:MySQL触发器不能对本表进行...触发器(如果有的话) ---- 注意事项 MySQL 5 触发器名必须在每个表唯一,但不是每个数据库唯一,即同一数据库的两个表可能具有相同名字的触发器 每个表的每个事件每次只允许一个触发器...触发器名字 ---- 触发器应用 触发器针对的是数据库的每一行记录,每行数据操作前后都会有一个对应的状态,触发器将没有操作之前的状态保存到 old 关键字,将操作后的状态保存到 new 语法...同时,如果在触发器中出现错误,那么前面的已经执行的操作也会全部清空 ---- 注意事项 ① mysql触发器不能对同一张表进行修改操作 假如我 before update 的时候作一条更新语句,随便将里面哪个字段进行更新...之后,又尝试触发器中进行 insert 和 delete 操作,之后更新的时候还是报同样的错误 因此说明:MySQL触发器不能对本表进行 insert、update 和 delete 操作,否则会报错

    2.5K10

    MySQL的大小写在drop或create触发器时的不同影响

    END; 当然了,如果触发器名不一样,执行时只会报一个错,或者drop时报not exists或者create时报already exists,但现在两个错误同时出现,问题出在哪里?...回想起来,脚本在从Oracle移植到mysql的过程,由最初的全大写(初次创建时)改成了后来的全小写,因而出现了这个问题。...Mysql运行在windows,按官方说法已经是大小写不敏感,而在my.ini也设置了大小写不敏感的 lower_case_table_names = 1,但从结果看只对表名有效,而对触发器只是部分有效...; Unix, Linux平台,数据库名、表名、表别名、触发器名等,就要区分大小写了; 日志文件组名,又是区分大小写的,这个一般情况下没多少人关注; 变量名严格区分大小写。...为了防止出现相同的代码不同平台出现异常的情况,通常有两种方法: 涉及到数据库、表、触发器的语句,一律用小写; my.ini的[mysqld]段,加上“lower_case_table_names=1

    1K20
    领券