Quantcast
Channel: IT瘾博客推荐
Viewing all articles
Browse latest Browse all 532

MySQL/Oracle:让表的时间字段在insert和update时自动更新_xuejianbest的专栏-CSDN博客_updated => time 怎麼插入時間

$
0
0
让字段自动更新为当前时间戳:

--insert时若不指定updated值,则插入当前时间
CREATE TABLE `test_update` (
  `id` int(32) NOT NULL,
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,  
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--insert时和update时若不指定updated值,则插入当前时间
CREATE TABLE `test_update` (
  `id` int(32) NOT NULL,
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--insert时若不指定updated值,则为NULL;update时若不指定updated值,则插入当前时间
CREATE TABLE `test_update` (
  `id` int(32) NOT NULL,
  `updated` timestamp NULL ON UPDATE CURRENT_TIMESTAMP, 
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

timestamp类型只用来存储创建时间和更新时间,因为可以自动更新,不需要程序里来处理。
一般的时间用varchar存储比较好处理。

添加一个新字段:

ALTER TABLE `toll_station` ADD COLUMN 
  `update_time` timestamp NOT NULL 
  DEFAULT CURRENT_TIMESTAMP 
  ON UPDATE CURRENT_TIMESTAMP 
  COMMENT '记录数据更新时间,自动更新,不要手动修改' 
AFTER `status`;
————————————————

用sql语句查看oracle表每条记录的创建时间(ora_rowscn)

      有时要查看表中的那条记录是什么时候创建的,有的会去用logminer去查看,有的会用闪回查询,其实很简单,不用那么麻烦,oracle的建每张表时都会建一个隐含的字段ora_rowscn,看到这个字段的名字,有写人会想到scn?对了,oracle在向表中插入记录时会记录插入记录时当前数据库的scn,那么聪明的你很快就会想到,既然有每条记录的scn,那么通过scn不就能查到每条记录的创建时间啦?全对!
      只要一句话,就可以轻松查看表记录的生成时间,相信这个应该会有帮助的!
      举个例子:
      select to_char(scn_to_timestamp(ORA_ROWSCN),'yyyy-mm-dd hh24:mi:ss') insert_time from scott.emp;
      结果将会看到emp表中每条记录创建时的时间。

      默认情况下,每行记录的ORA_ROWSCN是基于Block的,这样是不准确的,除非在建表的时候执行开启行级跟踪(create table … rowdependencies),这样就会是在行级记录scn。
      所以要想查看准确的记录创建时间则在建表时要加rowdependencies选项!


Viewing all articles
Browse latest Browse all 532

Trending Articles