資料庫安全·時間一致性
阿新 • • 發佈:2022-05-02
以下節選擇《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;