一、每行有改动,则触发更新modifytime

SQL> create table test(id int, name varchar(10), crdate date, udate date);

表已创建。

SQL>
SQL> create trigger tri_test_up
2 before update on test
3 for each row
4 begin
5 :new.udate := sysdate;
6 end;
7 /

触发器已创建

SQL>
SQL> insert into test values(100, 'zhang', date'2016-01-01', date'2016-01-01');

已创建 1 行。

SQL>
SQL> update test set name = 'xx';

已更新 1 行。

SQL>
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

会话已更改。

SQL>
SQL> select * from test;

ID NAME CRDATE UDATE
---------- -------------------- ------------------- -------------------
100 xx 2016-01-01 00:00:00 2017-09-25 10:39:39

SQL>
SQL> drop table test purge;

表已删除。

二、跨表更新modifytime触发器

create table m(mid int, modifytime date);
create table t(id int, mid int, c1 int, c2 int);
create table r(rid int, refid varchar(10), refname varchar(10));

insert into m(mid) select rownum from DUAL connect by rownum <=10;

insert into t(id,mid)
select rownum, mid from m, (select rownum from DUAL connect by rownum <= 10) x;

begin
insert into r(rid, refid, refname) values(1,'r1','XXX');
insert into r(rid, refid, refname) values(2,'r1','YYY');
insert into r(rid, refid, refname) values(3,'r1','ZZZ');

insert into r(rid, refid, refname) values(4,'r2','XXX');
insert into r(rid, refid, refname) values(5,'r2','YYY');
insert into r(rid, refid, refname) values(6,'r2','ZZZ');
insert into r(rid, refid, refname) values(7,'r2','XXX');
insert into r(rid, refid, refname) values(8,'r2','YYY');
insert into r(rid, refid, refname) values(9,'r2','ZZZ');
end;
/

update t set c1 = mod(dbms_random.value() * 10 + 1 ,2) + 3;
update t set c2 = mod(dbms_random.value() * 10 + 1 ,5) + 4;

create or replace trigger tri_r_update
before update on r
for each row
begin
update m
set modifytime = sysdate
where exists(select * from t where m.mid = t.mid and c1 = :new.rid);
update m
set modifytime = sysdate
where exists(select * from t where m.mid = t.mid and c2 = :new.rid);
end;
/

create index ix_t_c1 on t(mid,c1);
create index ix_t_c2 on t(mid,c2);

create index ix_m_mid on m (mid);

/*
select * from t where c2 = 9
select * from m
SELECT * FROM r
update r set refname = '099999' where rid = 9
update m set modifytime = null
*/

drop table m purge;
drop table t purge;
drop table r purge;

本表触发更新modifytime,跨表更新modifytime 触发器的更多相关文章

  1. Django之model联表:一对多、跨表操作,联表查询

    表结构概述 model.py : class Something(models.Model): name = models.CharField(max_length=32) class UserTyp ...

  2. MySQL把一个大表拆分多个表后,如何解决跨表查询效率问题

    大表分表后每个表的结构相同,可以用sql的union 比如a,b表结构相同可以通过union来联接 select * from aunion allselect * from bwhere.... 其 ...

  3. django(3) 一对多跨表查询、ajax、多对多

    1.一对多跨表查询获取数据的三种形式:对象.字典.元组 例:有host与business两张表,host与business的id字段关联,business在host表中的对象名是b,  通过查询hos ...

  4. django models的点查询/跨表查询/双下划线查询

    django models 在日常的编程中,我们需要建立数据库模型 而往往会用到表与表之间的关系,这就比单表取数据要复杂一些 在多表之间发生关系的情形下,我们如何利用models提供的API的特性获得 ...

  5. django orm 基于双下划线的跨表查询

    一..基于双下划线的跨表查询(join实现) key:正向查询按字段,反向查询按表明小写 1.一对多跨表查询 查询在跨表中可以有两种方式,正向查询就是关键字段在你要搜索的表,没有关键字段就是反向查询 ...

  6. Mysql跨表更新 多表update sql语句总结

    Mysql跨表更新一直是大家所关心的话题,本文介绍mysql多表 update在实践中几种不同的写法 假定我们有两张表,一张表为Product表存放产品信息,其中有产品价格列Price:另外一张表是P ...

  7. mysql 去重,跨表更新,跨表删除

    一.去重 1.查询出重复的记录 CREATE TABLE push_log_full_2013_10_30_tmp SELECT * FROM `push_log_full` WHERE time B ...

  8. Mysql跨表更新

    Mysql跨表更新一直是大家所关心的话题,本文介绍mysql多表 update在实践中几种不同的写法,需要的朋友可以参考下 假定我们有两张表,一张表为Product表存放产品信息,其中有产品价格列Pr ...

  9. update关联其他表批量更新数据-跨数据库-跨服务器Update时关联表条件更新

    1.有时在做项目时会有些期初数据更新,从老系统更新到新系统.如果用程序循环从老系统付给新系统. 2.有时在项目中需要同步程序,或者自动同步程序时会有大量数据更新就可能用到如下方法了. 3.为了做分析, ...

随机推荐

  1. Java单链表实现

    /** * * 单链表基本操作 * * @author John * */ class LinkList { private Node first; private int pos = 0; publ ...

  2. java类成员的访问权限

    private:这是安全级别最高的访问权限,尽在该类中可以访问到: 默认访问权限:又称包访问权限,顾名思义,仅在该包内可以访问: protected:在包访问权限的基础上,该类的子类也可以访问到: p ...

  3. oracle pl/sql 分页

    一.无返回值的存储过程 古人云:欲速则不达,为了让大家伙比较容易接受分页过程编写,我还是从简单到复杂,循序渐进的给大家讲解.首先是掌握最简单的存储过程,无返回值的存储过程. 案例:现有一张表book, ...

  4. 记录各种IE兼容问题,IE6,IE7,IE8,IE9,IE10

     记录遇到的IE BUG:  1.IE8开发者工具打不开 解决办法:IE8新增了开发人员工具,非常不错,比早期的DevToolbar好用多了.不过在我的Win7下 使用的时候偶尔会出现一个莫名其妙的问 ...

  5. noip的一些模板(参考了神牛的博客)

    一.图论 1.单源最短路 洛谷P3371 (1)spfa 已加SLF优化 419ms #include <iostream> #include <cstdio> #includ ...

  6. JS组件系列——基于Bootstrap Ace模板的菜单Tab页效果优化

    前言:之前发表过一篇  JS组件系列——基于Bootstrap Ace模板的菜单和Tab页效果分享(你值得拥有) ,收到很多园友的反馈,当然也包括很多诟病,因为上篇只是将功能实现了,很多细节都没有处理 ...

  7. Linux入门之常用命令(11)复制cp及scp

    [scp] ================== scp 命令 ================== scp 可以在 2个 linux 主机间复制文件: 命令基本格式:        scp [可选参 ...

  8. GCD hdu2588

    GCD Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  9. git添加比较和合并工具(meld)

    git 下的(difftool)和(mergetool)是专门提供给使用者用自己的工具进行diff和merge的命令: # git config --global diff.tool meld # g ...

  10. 【JAVA零基础入门系列】Day5 Java中的运算符

    运算符,顾名思义就是用于运算的符号,比如最简单的+-*/,这些运算符可以用来进行数学运算,举个最简单的栗子: 已知长方形的长为3cm,高为4cm,求长方形的面积. 好,我们先新建一个项目,命名为Rec ...