mysql 触发器生成时间戳_oracle 数据库触发器,插入更新时间戳

1、首先建立一个测试表

CREATE TABLE TestTragger(

UserIdintPrimary Key,

Name VARCHAR(10) Not Null,

CreateTime Timestamp Not Null

);

创建索引:(用于UserId主键自增)

一、old和new在Oracle中不区分大小写;

二、old和new可以用在declare中也可以用在begin里的sql语句;(只会在begin中的sql语句里用)

三、old表示插入之前的值,new表示新插入的值。

四、new 只出现在insert和update时,old只出现在update和delete时。在insert时new表示新插入的行数据,update时new表示要替换的新数据、old表示要被更改的原来的数据行,delete时old表示要被删除的数据。

四、for each row      --行级触发器,一般表记的会报错,没有深入研究

CREATE OR REPLACE TRIGGER MYUSAP //创建或替换 名称为MYUSAP的触发器

before INSERT OR UPDATE ON TestTragger //新增和修改执行前出发,对象目标:TestTragger表

FOR EACH ROW //行级触发器,每影响一行触发一次

BEGIN

IF INSERTING THEN //插入数据操作

:NEW.createtime :=SYSDATE;

ELSIF UPDATING then //修改数据操作

:NEW.createtime :=SYSDATE;

END IF;

END;

创建序列:

create sequence TESTTRAGGER_SQUENCE

INCREMENT BY1 --每次加几个

START WITH1 --从1开始计数

NOMAXVALUE--不设置最大值

NOCYCLE--一直累加,不循环

CACHE10;

测试插入和修改数据:

insert into testtragger(userid,name) values(TESTTRAGGER_SQUENCE.Nextval,'李四'); //插入数据

select userid,name, createtime, to_char(createtime,'yyyy-mm-dd hh:mm:ss') from testtragger; //查询数据

update testtragger set name='李四' where userid = 2; //修改数据

效果图:先查询现有的数据

mysql 触发器生成时间戳_oracle 数据库触发器,插入更新时间戳_第1张图片

然后执行修改操作:update testtragger set name='王五' where userid = 2;

mysql 触发器生成时间戳_oracle 数据库触发器,插入更新时间戳_第2张图片

修改完名称,时间戳也更新到了最新修改的时间。

注意,sysdate是精确到秒的时间戳,这个一般在粗略记录修改人的时候使用,

但是当我们是用来进行版本控制,我们需要很高的精确度,此时应该用毫秒级的时间戳:systimestamp

把触发器中的:sysdate改为systimestamp

1138573db7797c5248e85eb3645c2bb6.png

效果展示:

mysql 触发器生成时间戳_oracle 数据库触发器,插入更新时间戳_第3张图片

其实这里主键id也是可以在触发器中进行的,代码如下:

insert into testtragger(name) values('阿斯玛3');select userid,name, createtime, to_char(createtime,'yyyy-mm-dd hh24:mi:ssxff') fromtesttragger order by createtime ;

create sequence seq_testTragger_id start with1;--创建一个序列从1开始

CREATE OR REPLACE TRIGGER MYUSAP

before INSERT OR UPDATE ON TESTTRAGGER FOR EACH ROW

BEGIN

IF INSERTING THEN--插入数据操作select seq_testTragger_id.nextval into :new.UserId from dual; --:new新值 :old老值

:NEW.UserId := seq_testTragger_id.currval; --新增时为UserId赋值,利用序列自增,(oracle不支持 AUTO_INCREMENT,)

:NEW.createtime :=systimestamp;

ELSIF UPDATING then--修改数据操作

:NEW.createtime :=systimestamp;

END IF;

END;

DROP TRIGGER MYUSAP;--删除触发器

DROP SEQUENCE seq_testTragger_id;--删除序列

DELETE FROM TESTTRAGGER;--清空表

执行顺序和实例效果:

mysql 触发器生成时间戳_oracle 数据库触发器,插入更新时间戳_第4张图片

你可能感兴趣的:(mysql,触发器生成时间戳)