MYsql 和Oracle 的时间类型字段自动更新
MYsql 和Oracle 的时间类型字段自动更新
一、mysql
MySql的
在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;
/