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為系統時間戳。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM