CREATE TABLE `t1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) DEFAULT NULL, `ts` timestamp(6) GENERATED ALWAYS AS ROW START, `te` timestamp(6) GENERATED ALWAYS AS ROW END, PRIMARY KEY (`id`,`te`), PERIOD FOR SYSTEM_TIME (`ts`, `te`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 WITH SYSTEM VERSIONING; 注意看紅色字體,這就是新增加的語法,字段ts和te是數據變化的起止時間和結束時間。
另外用ALTER TABLE更改表結構,語法如下:
ALTER TABLE t1 ADD COLUMN ts TIMESTAMP(6) GENERATED ALWAYS AS ROW START, ADD COLUMN te TIMESTAMP(6) GENERATED ALWAYS AS ROW END, ADD PERIOD FOR SYSTEM_TIME(ts, te), ADD SYSTEM VERSIONING; 二、查詢歷史數據 這里我們做一個實驗,首先要插入1條數據,
接著把姓名為“張三”,改成“李四”(誤更改數據)
現在數據已經成功變更,那么我想查看歷史數據怎么辦呢?非常簡單,一條命令搞定。
語法一:查詢一小時內的歷史數據。 SELECT * FROM t FOR SYSTEM_TIME BETWEEN (NOW() - INTERVAL 1 HOUR) AND NOW(); HOUR:小時 MINUTE:分鐘 DAY:天 MONTH:月 YEAR:年
語法二:查詢一段時間內的歷史數據 SELECT * FROM t1 FOR SYSTEM_TIME FROM '2018-05-15 00:00:00' TO '2018-05-15 14:00:00';
語法三:查詢所有歷史數據 SELECT * FROM t1 FOR SYSTEM_TIME ALL;
三、恢復歷史數據 現在我們已經找到了歷史數據“張三”,只需把它導出來做恢復即可。
SELECT id,name FROM t1 FOR SYSTEM_TIME ALL where id = 1 AND name = '張三' into outfile '/tmp/t1.sql' / FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'; FIELDS TERMINATED BY ',' --- 字段的分隔符 OPTIONALLY ENCLOSED BY '"' --- 字符串帶雙引號
導入恢復
load data infile '/tmp/t1.sql' replace into table t1 / FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' / (id,name);