`
zyn010101
  • 浏览: 325009 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql 触发器更新本表

 
阅读更多

mysql的触发器不能对本表进行update操作,如下面 的示例,直接报

Can’t update table ‘tbl’ in stored function/trigger because it is already used by statement which invoked this stored function/trigger 错误,

 

 

 如果你在触发器里面对刚刚插入的数据进行了 insert/update, 则出现这个问题。因为会造成循环的调用.

 

create trigger test
before update on test
for each row
  update test set NEW.updateTime = NOW() where id=NEW.ID;
END


应该使用set操作,而不是在触发器里使用 update,比如

create trigger test
before update on test
for each row
set NEW.updateTime = NOW();
END

 

若涉及多个表,则可采取声明局部变量的方式,如下所示

  

 

create Trigger updateExam
before  insert
on  hrt_exam_action_examinee for each ROW
BEGIN
declare personName varchar(50);
declare area varchar(50);
declare deptName varchar(200);
declare idCard varchar(50);
declare courseName varchar(100);
select e.fd_name,e.fd_import_info,e.fd_importal_link into personName,area,deptName from sys_org_element e where e.fd_id = NEW.fd_org_id;
select p.fd_login_name into idCard from sys_org_person p where p.fd_id = NEW.fd_org_id;
select ea.fd_describe into courseName from hrt_exam_action ea where ea.fd_id = NEW.fd_action_id;
set NEW.fd_person_name=personName,NEW.fd_area=area,NEW.fd_dept_name=deptName,NEW.fd_id_card=idCard,NEW.fd_course_name=courseName;
end;
delimiter;

 

 

 

若出现ERROR 1406 : Data too long for column Data too long for column ,

首先检查mysql的默认编码,或者在my.ini里找到
sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION”
把其中的STRICT_TRANS_TABLES,去掉,
或者把sql-mode=STRICT_TRANS_TABLES,NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION

注释掉,然后重启mysql就ok了



分享到:
评论

相关推荐

    mysql触发器之创建多个触发器操作实例分析

    本文实例讲述了mysql触发器之创建多个触发器操作。分享给大家供大家参考,具体如下: 这次记录的内容mysql 版本必须得是5.7.2+的哈,之前的会不好使的。废话不多说,咱们开始正文哈。 在mysql 5.7.2+版本之前,我们...

    mysql触发器之触发器的增删改查操作示例

    MySQL触发器在实际应用中扮演着重要角色,比如在数据插入、更新或删除前后的验证、审计日志记录、数据同步和计算复杂业务逻辑等场景。触发器的使用应该谨慎,因为它们可能会增加数据库的复杂性,并可能导致性能问题...

    MYSQL触发器教程.doc

    MySQL触发器是数据库管理系统中的一种重要机制,它允许在特定的数据库操作(如INSERT、UPDATE、DELETE)发生前后自动执行一段预定义的SQL代码。触发器的引入是为了满足更复杂的数据完整性需求,提供数据验证、业务...

    mysql触发器+存储过程

    例如,你可以创建一个触发器,当向表中插入新记录时,自动更新与之相关的其他表。这样,可以确保数据的一致性,而无需在应用程序代码中进行额外的处理。 触发器主要有以下几种类型: 1. BEFORE INSERT:在插入记录...

    MySQL触发器.pdf

    ### MySQL触发器详解 #### 引言 MySQL触发器,作为MySQL 5.0版本引入的一项重要特性,为数据库管理提供了更为精细的控制能力。触发器允许在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行SQL语句,...

    MySQL触发器.rar

    在"MySQL触发器.pdf"这本书籍教程中,你可能会深入学习到触发器的详细用法,包括如何创建、修改和删除触发器,以及如何在实际项目中有效利用它们。"下载说明.txt"可能包含了获取更多资源的指引,而"A5下载- 更全的...

    mysql中触发器使用详解.docx

    MySQL中的触发器是一种数据库对象,它与特定的表相关联,并在对表执行INSERT、UPDATE或DELETE操作之前或之后自动执行预定义的SQL语句。触发器的主要作用是增强数据库的逻辑控制,确保数据完整性、记录操作日志以及...

    mysql触发器使用

    在深入探讨MySQL触发器的使用之前,我们先来理解一下什么是触发器以及它在数据库管理中的作用。触发器是数据库中一种特殊的存储过程,当特定的事件(如INSERT、UPDATE或DELETE操作)在指定的表上发生时自动执行。...

    mysql触发器文档

    MySQL触发器是一种服务器端的程序,它可以响应特定的数据库事件(如插入、更新或删除记录)而自动执行。触发器自MySQL 5.0版本起被引入,这标志着MySQL在功能性上的一大进步,使其能够更好地满足企业级应用的需求。 ...

    mysql触发器教程

    MySQL触发器是一种存储在数据库中的特殊类型的存储过程,当特定的事件(如插入、更新或删除数据)发生时自动执行。它们允许用户定义一系列复杂的规则和逻辑,以便在数据库操作时执行额外的操作。 #### 二、MySQL...

    mysql触发器

    在本篇讨论中,我们将深入理解MySQL触发器的概念、类型、语法以及如何在实践中应用。 1. 触发器的概念: MySQL触发器是一种存储过程,它在用户执行数据修改操作(DML:Data Manipulation Language)时自动执行。...

    MYSQL触发器使用详解

    MYSQL触发器,可以使用它用来进行监控,例如商品价格变化,下单后商品库存减少等实用性操作!

    [数据库] Navicat for MySQL触发器更新和插入操作1

    - 触发器主要用于增强数据的完整性,执行复杂的业务规则,例如在数据插入、更新或删除时进行额外的验证或联动操作。 2. **触发器创建语法**: - 触发器的创建需要指定四个要素:监视的表(table)、监视的事件...

    实验九MySQL的触发器.pdf

    通过这个实验,学生可以深入理解MySQL触发器的工作原理,以及如何在实际环境中应用它们来增强数据库的管理和安全性。实验报告应包含实验步骤、观察结果、问题分析和总结,以巩固理论知识和实践技能。

    mysql触发器.zip

    MySQL触发器是数据库管理系统中的一个重要特性,它允许在特定的数据库操作(如INSERT、UPDATE或DELETE)发生之前或之后执行自定义的SQL代码。这些自动执行的代码块可以用来实现复杂的业务逻辑,确保数据的一致性和...

    Mysql触发器介绍

    ### MySQL触发器详解 #### 一、引言 MySQL 的触发器与存储过程类似,都是内嵌于数据库的一种编程机制。触发器的概念最早出现在 MySQL 5.0 版本中,这一特性使得开发者能够编写自动化的数据库操作逻辑,用于响应...

    MySQL触发器、存储过程、自定义函数、视图示例

    ### MySQL触发器、存储过程、自定义函数、视图示例 #### 一、MySQL触发器 触发器是一种特殊类型的存储过程,它被设计为在特定事件(如INSERT、UPDATE或DELETE操作)发生时自动执行。触发器可以用来强制业务规则、...

    mysql 触发器实现两个表的数据同步

    mysql通过触发器实现两个表的同步 目前,在本地测试成功。 假设本地的两个数据库a和b,a下有表table1(id, val) b下有表table2(id, val) 假设希望当table1中数据更新,table2中数据同步更新。 代码: DELIMITER $...

Global site tag (gtag.js) - Google Analytics