精华内容
下载资源
问答
  • 更多相关内容
  • MySQL触发器new old 的理解

    千次阅读 2021-01-18 18:20:41
    在数据库的触发器中经常会用到更新前的值和更新后的值,所有要理解new和old的作用很重要。当时我有个情况是这样的:我要插入一行数据,在行要去其他表中获得一个单价,然后和这行的数据进行相乘的到总金额,将该行的...

    在数据库的触发器中经常会用到更新前的值和更新后的值,所有要理解new和old的作用很重要。当时我有个情况是这样的:我要插入一行数据,在行要去其他表中获得一个单价,然后和这行的数据进行相乘的到总金额,将该行的金额替换成相乘的结果。

    一开始我使用的after,然后对自身的值进行更改。

    insert

    update

    delete

    old

    null

    实际值

    实际值

    new

    实际值

    实际值

    null

    在Oracle中用:old和:new表示执行前的行,和执行后的行。在MySQL中用old和new表示执行前和执行后的数据。

    问题的起源

    之前对数据库的触发器是这样写的:

    CREATE TRIGGER triggerName after insert ON consumeinfo

    FOR EACH ROW

    BEGIN

    UPDATE consumeinfo SET new.金额=0;

    END;

    触发器创建没问题,但是插入数据出现以下错误。

    [Err] 1442 - Can't update table 'consumeinfo' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

    但是通过上网搜索的结果说对本表进行修改不用使用 update consumeinfo,直接使用SET new.金额=0。这个做法对的,因为这样使用new先对当前的金额改变了,然后存到数据库中的,不用使用update consumeinfo。

    经过一番努力,以下是成功后的代码,贴出来看看

    CREATE TRIGGER addnewReco BEFORE INSERT ON consumeinfo FOR EACH ROW

    BEGIN

    SET new.金额 = (

    SELECT `单价`

    FROM pricenow

    WHERE `类型` = new.类型

    ) * new.数量;

    END;

    后来在吃饭的时候突然想到new和old在after和before上使用情况不同。其实还是因为new不能在after进行赋值,只能进行读取,复制要在before时赋值。

    new和old的使用情况

    下面具体说说old和new的使用情况。在对new赋值的时候只能在触发器before中只用,在after中是不能使用的,比如(以下是正确的)。

    CREATE TRIGGER updateprice

    BEFORE insert ON consumeinfo

    FOR EACH ROW

    BEGIN

    set new.金额=0;

    END;

    这个说明对当前插入数据进行更新的时候使用before先更新完,然后才插入到数据库中的,在after的触发器中,new的赋值已经结束了,只能读取内容。 如果使用after不能使用new赋值,只能取值,否则会出错误,比如

    CREATE TRIGGER updateprice

    AFTER insert ON consumeinfo

    FOR EACH ROW

    BEGIN

    set new.金额=0;

    END;

    出现这样的错误:

    [Err] 1362 - Updating of NEW row is not allowed in after trigger

    总结:new在before触发器中赋值,在after触发器中取值。old在用于取值?因为赋值没意义?

    展开全文
  • mysql触发器new和old

    2021-01-21 07:42:25
    下面为您介绍mysql触发器new old的相关知识,供您参考学习,如果您在mysql触发器方面遇到过类似的问题,不妨一看,相信对您会有所帮助。mysql触发器new old:"NEW . column_name"或者"OLD . column_name".这样在技术...

    下面为您介绍mysql触发器new old的相关知识,供您参考学习,如果您在mysql触发器方面遇到过类似的问题,不妨一看,相信对您会有所帮助。

    mysql触发器new old:

    "NEW . column_name"或者"OLD . column_name".这样在技术上处理(NEW | OLD . column_name)新和旧

    的列名属于创建了过渡变量("transition variables")。

    对于INSERT语句,只有NEW是合法的;对于DELETE语句,只有OLD才合法;而UPDATE语句可以在和NEW以及

    OLD同时使用。下面是一个UPDATE中同时使用NEW和OLD的例子。

    CREATE TRIGGER tr1

    BEFORE UPDATE ON t22

    FOR EACH ROW

    BEGIN

    SET @old = OLD.s1;

    SET @new = NEW.s1;

    END;

    现在如果t21表中的s1列的值是55,那么执行了"UPDATE t21 SET s1 = s1 + 1"之后@old的值会变成55,

    而@new的值将会变成56。

    触发器的执行间隔:FOR EACH ROW子句通知触发器每隔一行执行一次动作,而不是对整个表执行一次。

    列值递增:

    create table a(

    id int primary key auto_increment,##设置为自动递增

    name varchar(10)

    );

    设置初始值为1000 :

    ALTER   TABLE   tablename   AUTO_INCREMENT=1000;

    MySQL触发器如何正确使用

    MySQL触发器如何正确使用 2010-05-18 15:58 佚名 博客园 字号:T | T 我们今天主要向大家介绍的是MySQL触发器进行正确使用,其中包括对MySQL触发器发器的语句创建,触发时 ...

    【转】mysql触发器的实战(触发器执行失败,sql会回滚吗)

    1   引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程 ...

    redis作为mysql的缓存服务器(读写分离,通过mysql触发器实现数据同步)

    一.redis简介Redis是一个key-value存储系统.和Memcached类似,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录 ...

    mysql触发器的例子--插入前更新数据

    本文介绍下,一个mysql触发器的例子,在数据插入前更新相关内容,有需要的朋友参考下. mysql触发器的例子,如下: view source print? 001 mysql> CREATE  ...

    mysql触发器的作用及语法

    触发器是一种特殊的存储过程,它在插入,删除或改动特定表中的数据时触发运行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力. 数据库触发器有下面的作用: 1.安全性.能够基于数据库的值使用户具有 ...

    MySQL 触发器结构及三个案例demo

    --你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了.这跟SQL的标准有所不同. CREATE TRIGGER语法 CREATE TRIGG ...

    利用MySQL触发器实现check和assertion

    MySQL虽然输入check语句不会报错,但是实际上并没有check的功能.但是MySQL 依然可以利用触发器来实现相应功能. 本文将根据两个例子简要阐述MySQL实现check和assertion的 ...

    猎八哥浅谈MYSQL触发器

    什么是MYSQL触发器,我们先了解一下触发的意思.触发的字面意思是指因触动而激发起某种反应. MYSQL必知必会中对触发器的解释是:MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于 B ...

    MYSQL触发器在PHP项目中用来做信息备份、恢复和清空

    案例:通过PHP后台代码可以将员工的信息删除,将删除的员工信息进行恢复(类似于从回收站中恢复员工信息),并且还可以将已经删除的员工进行清空(类似于清空回复站的功能). 思路:要有一张员工表,还要有一张 ...

    MySQL触发器在PHP项目中用来做信息备份、恢复和清空的方法介绍

    案例:通过PHP后台代码可以将员工的信息删除,将删除的员工信息进行恢复(类似于从回收站中恢复员工信息),并且还可以将已经删除的员工进行清空(类似于清空回复站的功能). 思路:要有一张员工表,还要有一张 ...

    随机推荐

    零基础在线制作Windows Phone 8 应用

    任何用户(不管你是否会编程),只要你有浏览器,都可以使用 Windows Phone App Studio (下文中用App Studio指代) 快速制作出一个属于你的Windows Phone的应用 ...

    scrollToItemAtIndexPath: atScrollPosition: animated:

    oh my god 今天死在scrollToItemAtIndexPath: atScrollPosition: animated:方法上面,scrollPosition这个参数控制cell具体停留在 ...

    oracle job的写法

    DECLAREX NUMBER;begin sys.dbms_job.submit(job => x, what => 'begindd_income_risk_control;end;' ...

    关于在SharePoint2013中弹出模态化窗口的问题及关闭事件。

    js: /*弹出对话框方法开始*//** 弹窗方法(需要回传值时,自定义回调方法)* @url: 弹出窗口页面url* @width: 宽度* @height: 高度* @callback: 回调函数 ...

    mvc:annotation-driven' must have no character or element问题

    使用SpringMVC,启动tomcat报这个错误 解决办法 首先将Spring版本提升到3.1及以上 如果还不行替换xml文件头部: <?xml  version="1.0" ...

    浅谈Struts2&lpar;二&rpar;

    一.struts2的跳转 1.action跳转JSP a.默认为forward

    展开全文
  • mysql触发器——NEWOLD aes_encrypt AES_DECRYPT

    mysql触发器中, NEW关键字,和 MS SQL Server 中的 INSERTED 和 DELETED 类似,MySQL 中定义了 NEW 和 OLD,用来表示触发器的所在表中,触发了触发器的那一行数据。

    具体地:
    在 INSERT 型触发器中,NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据;
    在 UPDATE 型触发器中,OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据;
    在 DELETE 型触发器中,OLD 用来表示将要或已经被删除的原数据;
    使用方法: NEW.columnName (columnName 为相应数据表某一列名)
    另外,OLD 是只读的,而 NEW 则可以在触发器中使用 SET 赋值,这样不会再次触发触发器,造成循环调用。
    原文链接:https://blog.csdn.net/bcfdsagbfcisbg/article/details/78338434

    #insert之前
    CREATE TRIGGER tb_merchant_user_encryption_insert
    BEFORE INSERT ON tb_merchant_user FOR EACH ROW
    BEGIN
    if new.login_name is not null then
    set new.login_name=aes_encrypt(new.login_name, ‘login_name’);
    end if;
    END;

    #update之前把
    CREATE TRIGGER tb_merchant_user_encryption_update
    BEFORE UPDATE ON tb_merchant_user FOR EACH ROW
    BEGIN
    if new.login_name is not null then
    set new.login_name=aes_encrypt(new.login_name, ‘login_name’);
    end if;
    END;

    is not null 在 new.login_name为null 时会失效 改为 null!=new.login_name
    如需加入字符判断 length(trim(new.login_name))>0

    展开全文
  • mysql触发器new old用法详解

    万次阅读 2018-07-16 22:29:47
    mysql触发器new old用法详解 2018年07月05日 17:03:55 阅读数:42   1.当使用insert语句的时候,如果原表中没有数据的话,那么对于插入数据后表来说新插入的那条数据就是new,如图所示: 2.当使用delete语句...
  • 本文主要内容:mysql触发器new old用法详解mysql触发器new old:"NEW . column_name"或者"OLD . column_name".在技术上处理(NEW | OLD . column_name)新和旧的列名属于创建了过渡变量("transition variables")。对于...
  • 触发器中,可以通过old和new来获取绑定表中对应的记录数据。基本语法:关键字.字段名 old和new并不是所有触发器都有 insert:插入前全为空,没有old delete:清空数据,没有new -- 自动扣除商品库存的触发器 ...
  • mysql 触发器OLD和NEW关键字

    千次阅读 2015-01-06 15:49:06
    使用OLD和NEW关键字,能够访问受触发程序影响的行中的列(OLD和NEW不区分大小写)。在INSERT触发程序中,仅能使用NEW.col_name,没有旧行。在DELETE触发程序中,仅能使用OLD.col_name,没有新行。在UPDATE触发程序中...
  • mysql触发器new old详解mysql触发器new old:"NEW . column_name"或者"OLD . column_name".这样在技术上处理(NEW | OLD . column_name)新和旧的列名属于创建了过渡变量("transition variables")。对于INSERT语句,只有...
  • Before与After区别:before:(insert、update)可以对new进行修改。after不能对new进行修改。...这个触发的时间分为BEFOREAFTER两种,分别有beforeinsert,before update,before deleteafter insert,after upda...
  • 下面为您介绍mysql触发器new old的相关知识,供您参考学习,如果您在mysql触发器方面遇到过类似的问题,不妨一看,相信对您会有所帮助。mysql触发器new old:"NEW . column_name"或者"OLD . column_name".这样在技术...
  • 1.触发器是什么?一类特殊的数据库程序,可以监视某种数据的操作(insert/update/...Mysql好像是从5.0以后开始支持触发器的。2.创建触发器创建触发器我将介绍两种方式:用语句创建,用navicat创建。创建触发器的...
  • mysql触发器中的new和old

    千次阅读 2021-10-23 16:20:33
    上一篇中,简单使用触发器同步俩个表的数据,但是出现了old和new的用法,这一篇文章中简单总结一下。 1.插入操作 insert 对于insert语句,如果原表中没有数据,那么对于插入数据后表来说新插入的那条数据就是new。...
  • mysql触发器new old介绍

    2021-01-19 00:07:33
    下面为您介绍mysql触发器new old的相关知识,供您参考学习,如果您在mysql触发器方面遇到过类似的问题,不妨一看,相信对您会有所帮助。mysql触发器new old:"NEW . column_name"或者"OLD . column_name".这样在技术...
  • mysql通过触发器实现两个表的同步 目前,在本地测试成功。 假设本地的两个数据库ab,a下有表table1(id, val) b下有表table2(id, val) 假设希望当table1中数据更新,table2中数据同步更新。 代码: DELIMITER $...
  • bitsCN.commysql触发器new old详解mysql触发器new old:"NEW . column_name"或者"OLD . column_name".这样在技术上处理(NEW | OLD . column_name)新和旧的列名属于创建了过渡变量("transition variables")。对于...
  • mysql触发器——NEWOLD解析

    万次阅读 多人点赞 2017-10-25 10:40:10
    mysql触发器中, NEW关键字, MS SQL Server 中的 INSERTED DELETED 类似,MySQL 中定义了 NEW OLD,用来表示触发器的所在表中,触发了触发器的那一行数据。 具体地: 在 INSERT 型触发器中,NEW 用来...
  • 开发环境win764+mysql5.6mysql触发器的基本语法createtrigger触发器名字after/beforeinsert/update/deleteon表名foreachrowbegin#一些sql语法end;解发器执行的sql语句可以放在begin end中间,执行的语句中可以对当前...
  • mysql 触发器 new.id

    2021-03-03 21:52:07
    mysql触发器目前不能对当前表进行操作 create trigger update_Student BEFORE update on student FOR EACH ROW delete from articles where id=8; 这个例子不是......trigger insert_trigger after insert on ...
  • MySQL触发器详解

    2021-04-12 17:34:41
    触发器定义 ...触发时间:前后before after After:是表示触发事件的操作在执行之后才激活触发器 ; Before:是在触发事件操作执行之前激活触发器 触发对象:表中的每一条记录(行) 一张表最后有...
  • 下面为您介绍 MySQL 触发器new old的相关知识,供您参考学习,如果您在MySQL触发器方面遇到过类似的问题,不妨一看,相信对您会有所帮助。mysql触发器new old:"NEW . column_name"或者"OLD . column_name".这样在...
  • mysql触发器new old 详解 真实例子

    千次阅读 2013-01-26 11:22:05
    mysql触发器new old: "NEW . column_name"或者"OLD . column_name".这样在技术上处理(NEW | OLD . column_name)新和旧 的列名属于创建了过渡变量("transition variables")。 对于INSERT语句,只有NEW是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,700
精华内容 4,680
关键字:

mysql触发器old和new

mysql 订阅