MYsql 和Oracle 的时间类型字段自动更新

 

MYsql 和Oracle 的时间类型字段自动更新

一、mysql

MySql的timestamp类型跟oracle里有很大不同

在mysql里,咱们一般在建立表时会设置一个建立时间(create_time)和一个修改时间(update_time),而后给建立时间设置默认值CURRENT_TIMESTAMP,给修改时间设置默认值CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,这样就能让建立时间和修改时间在插入数据时自动插入当前时间,而在修改数据时,自动更新修改时间。

也可以在建表时设置为 create_time timestamp default current_timestamp

方法一:

建表时使用以下语句:

default current_timestamp on update current_timestamp

方法二:

或者单独添加

ALTER TABLE testtimestamp CHANGE gmt_update  gmt_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP  ON UPDATE CURRENT_TIMESTAMP

 

一条新数据插入时,它会自动被赋值为当前数据库时间(current_timestamp)

当这条数据的任何一列发生更改时,它的值会自动更新为当前时间(current_timestamp)

一般我们建表的时候都习惯加上,create_time 和 update_time 两个字段。方便日后一些分析

1.1 使用timestamp

1.1.1 创建表

CREATE TABLE `testtimestamp` (
 `id` int NOT NULL AUTO_INCREMENT,
 `name` varchar(20) NOT NULL,
 `pwd` varchar(50) NOT NULL,
 `gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `gmt_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb3

1.1.2 插入新记录

INSERT INTO testtimestamp(NAME,pwd) VALUES('gaoxing','12344');

可以看到,会创建时间和更新时间会自动产生。

1.1.3 更新记录

UPDATE testtimestamp SET NAME="gaoxing.zh" WHERE NAME='gaoxing1.zh' 

1.2 使用datetime

1.2.1 创建表

查看数据库建表语句,我们使用 datetime

show create database testmd5
CREATE TABLE `testmd5` (
 `id` int NOT NULL AUTO_INCREMENT,
 `name` varchar(20) NOT NULL,
 `pwd` varchar(50) NOT NULL,
 `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `gmt_update` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb3

1.2.2 插入新记录

INSERT INTO testmd5(NAME,pwd) VALUES('gaoxing','12344');

可以看到,会创建时间和更新时间会自动产生。

 

1.2.3 更新记录

UPDATE testmd5 SET NAME="gaoxing1.zh" WHERE NAME='gaoxing' 

更新后,再查看,update也修改。

 

1.3 使用now()

如果不指定DEFAULT CURRENT_TIMESTAMP和 ON UPDATE CURRENT_TIMESTAMP, 也就要求我们insert和update数据时,必须设置create_time 的值为now()

二、oracle

而在Oracle中咱们能够经过给建立时间和修改时间设置默认值为sysdate,可是,却不能给修改时间设置为在修改数据时自动更新修改时间。

这个时候就须要用到触发器了。定义一个触发器,当修改表中的数据时,让触发器去更新修改时间。

 

oracle里建表常用的方式如下,更新数据时sql里显式的更新update_time字段

create_time  TIMESTAMP  default sysdate,

update_time  TIMESTAMP,

方法一:应用层

更新数据时sql里显式的更新update_time字段,即应用层。

 

方法二:数据库触发器

 

CREATE OR REPLACE TRIGGER confirmation_auto_update_time //创建或替换 名称为confirmation_auto_update_time的触发器
before INSERT OR UPDATE ON user_confirmation //新增和修改执行前出发,对象目标:TestTragger表
FOR EACH ROW //行级触发器,每影响一行触发一次
BEGIN
IF INSERTING THEN //插入数据操作
:NEW.update_time :=SYSDATE;
ELSIF UPDATING then //修改数据操作
:NEW.update_time :=SYSDATE;
END IF;
END;
/

或者

create or replace trigger confirmation_auto_update_time
before
update on user_confirmation
for each row
begin
 select sysdate into :NEW.update_time from dual;
end;
/

 

其中update_time为列名称。SYSDATE为系统时间戳。

posted @ 2022-04-12 08:57  高兴518  阅读(3592)  评论(0编辑  收藏  举报