数据库安全·时间一致性

以下节选择《Netkiller Architect 手札》地址 http://www.netkiller.cn/architect/

接下来几周的话题是数据库安全。

5.3. 时间一致性

经常会因为每个服务器的时间不同,导致插入数据有问题,虽然可以采用ntp服务同步时间,但由于各种因素仍然会出问题,怎么解决?我建议以数据库时间为准。

MySQL 5.6 之前的版本

默认值为当前时间

CREATE TABLE `tdate` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`ctime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	`mtime` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '修改时间',
	PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;		

MySQL不允许一个表拿有两个默认时间。我一无法兼顾修改时间,我们舍弃创建时间,当有数据变化ON UPDATE CURRENT_TIMESTAMP自动修改时间

CREATE TABLE `tdate` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`ctime` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间',
	`mtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
	PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;		

插入创建时间 insert into tdate(ctime) values(CURRENT_TIMESTAMP); 不要采用 insert into tdate(ctime) values('2013-12-02 08:20:06');这种方法,尽量让数据库处理时间。

MySQL 5.6 之后版本,可以实现创建时间为系统默认,修改时间创建的时候默认为空,当修改数据的时候更新时间。

		CREATE TABLE `tdate` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`ctime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	`mtime` TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
	PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;		

原文发布于微信公众号 - Netkiller(netkiller-ebook)

原文发表时间:2016-08-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java达人

mysql的外键

在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据...

1747
来自专栏性能与架构

Mysql 查看表及索引空间大小

查看数据库占用空间 SELECT CONCAT(ROUND((sum(DATA_LENGTH)+sum(INDEX_LENGTH))/(1024*1024),2...

3155
来自专栏左瞅瞅,右瞅瞅

SaltStack——小叙(远程执行)

想要返回结果返回mysql 库中,返回是salt-minion 返回,所有的salt-minion 需要安装Mysql-python 依赖包:

1774
来自专栏沃趣科技

Oracle 12c 多租户专题|12cR2中PDB内存资源管理

原文链接 https://oracle-base.com/articles/12c/multitenant-memory-resource-managemen...

4097
来自专栏DeveWork

WordPress 修改默认的 wp_ 数据库前缀

在安装WordPress 的时候,默认的数据库前缀都是 wp_,为了日益突出的安全问题,最好修改默认的 wp_ 数据库前缀(当然,前提是你已经按照默认前缀安装了...

1776
来自专栏康怀帅的专栏

MySQL 初级命令

本文列举了一些初级的 MySQL 命令。 创建 数据库 CREATE DATABASE 数据库名; 数据表 CREATE TABLE IF NOT EXISTS...

2737
来自专栏互联网开发者交流社区

数据定义: CREATE、DROP、ALTER

902
来自专栏杨建荣的学习笔记

关于物化视图疑问(32天)

--初始化操作, 创建两个用户一个,testo,一个test. 在testo上创建表,test上创建物化视图。 SQL> create user testo ...

3205
来自专栏开源项目

Git 项目推荐 | 分布式系统唯一 ID 生成方法

image.png 在工程中引用sequence项目的sequence-client jar包 在的应用数据库中创建两个sequence表,sql语句如下:...

30711
来自专栏数据库新发现

关于Oracle降序索引的定意及回溯

降序索引本质上是FBI,其具体定义可以通过 user_ind_expressions 或dba_ind_expressions 查询。 那么同样的,降序索引只有...

734

扫描关注云+社区