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;
/