set default_storage_engine=innodb; create or replace table dept ( dept_id int(10) primary key, name varchar(100) ) with system versioning; create or replace table emp ( emp_id int(10) primary key, dept_id int(10), name varchar(100), salary int(10), constraint `dept-emp-fk` foreign key (dept_id) references dept (dept_id) on delete restrict on update restrict ) with system versioning; select now() into @ts_0; insert into dept (dept_id, name) values (10, "accounting"); commit; select row_start into @ts_1 from dept where dept_id=10; insert into emp (emp_id, name, salary, dept_id) values (1, "bill", 1000, 10); commit; select row_start into @ts_2 from emp where name="bill"; select * from emp; emp_id dept_id name salary 1 10 bill 1000 update emp set salary=2000 where name="bill"; commit; select row_start into @ts_3 from emp where name="bill"; select * from emp; emp_id dept_id name salary 1 10 bill 2000 select * from emp for system_time as of timestamp @ts_2; emp_id dept_id name salary 1 10 bill 1000 select * from emp for system_time as of timestamp @ts_3; emp_id dept_id name salary 1 10 bill 2000 select * from emp e, dept d where d.dept_id = 10 and d.dept_id = e.dept_id; emp_id dept_id name salary dept_id name 1 10 bill 2000 10 accounting select * from emp for system_time from timestamp @ts_1 to timestamp @ts_2 e, dept for system_time from timestamp @ts_1 to timestamp @ts_2 d where d.dept_id = 10 and d.dept_id = e.dept_id; emp_id dept_id name salary dept_id name set statement system_versioning_asof=@ts_0 for select * from emp e, dept d where d.dept_id = 10 and d.dept_id = e.dept_id; emp_id dept_id name salary dept_id name set statement system_versioning_asof=@ts_1 for select * from emp e, dept d where d.dept_id = 10 and d.dept_id = e.dept_id; emp_id dept_id name salary dept_id name set statement system_versioning_asof=@ts_2 for select * from emp e, dept d where d.dept_id = 10 and d.dept_id = e.dept_id; emp_id dept_id name salary dept_id name 1 10 bill 1000 10 accounting set statement system_versioning_asof=@ts_3 for select * from emp e, dept d where d.dept_id = 10 and d.dept_id = e.dept_id; emp_id dept_id name salary dept_id name 1 10 bill 2000 10 accounting drop table emp, dept; create table t1 ( a timestamp(6), b timestamp(6) generated always as (a + interval 1 day), c timestamp(6) generated always as (a + interval 1 month) stored, d timestamp(6) generated always as row start, e timestamp(6) generated always as row end, period for system_time(d,e) ) with system versioning; show columns from t1; Field Type Null Key Default Extra a timestamp(6) NO current_timestamp(6) on update current_timestamp(6) b timestamp(6) YES NULL VIRTUAL GENERATED c timestamp(6) YES NULL STORED GENERATED d timestamp(6) NO NULL STORED GENERATED e timestamp(6) NO NULL STORED GENERATED select *,'---' from information_schema.columns where table_name='t1'; TABLE_CATALOG def TABLE_SCHEMA test TABLE_NAME t1 COLUMN_NAME a ORDINAL_POSITION 1 COLUMN_DEFAULT current_timestamp(6) IS_NULLABLE NO DATA_TYPE timestamp CHARACTER_MAXIMUM_LENGTH NULL CHARACTER_OCTET_LENGTH NULL NUMERIC_PRECISION NULL NUMERIC_SCALE NULL DATETIME_PRECISION 6 CHARACTER_SET_NAME NULL COLLATION_NAME NULL COLUMN_TYPE timestamp(6) COLUMN_KEY EXTRA on update current_timestamp(6) PRIVILEGES select,insert,update,references COLUMN_COMMENT IS_GENERATED NEVER GENERATION_EXPRESSION NULL --- --- TABLE_CATALOG def TABLE_SCHEMA test TABLE_NAME t1 COLUMN_NAME b ORDINAL_POSITION 2 COLUMN_DEFAULT NULL IS_NULLABLE YES DATA_TYPE timestamp CHARACTER_MAXIMUM_LENGTH NULL CHARACTER_OCTET_LENGTH NULL NUMERIC_PRECISION NULL NUMERIC_SCALE NULL DATETIME_PRECISION 6 CHARACTER_SET_NAME NULL COLLATION_NAME NULL COLUMN_TYPE timestamp(6) COLUMN_KEY EXTRA VIRTUAL GENERATED PRIVILEGES select,insert,update,references COLUMN_COMMENT IS_GENERATED ALWAYS GENERATION_EXPRESSION `a` + interval 1 day --- --- TABLE_CATALOG def TABLE_SCHEMA test TABLE_NAME t1 COLUMN_NAME c ORDINAL_POSITION 3 COLUMN_DEFAULT NULL IS_NULLABLE YES DATA_TYPE timestamp CHARACTER_MAXIMUM_LENGTH NULL CHARACTER_OCTET_LENGTH NULL NUMERIC_PRECISION NULL NUMERIC_SCALE NULL DATETIME_PRECISION 6 CHARACTER_SET_NAME NULL COLLATION_NAME NULL COLUMN_TYPE timestamp(6) COLUMN_KEY EXTRA STORED GENERATED PRIVILEGES select,insert,update,references COLUMN_COMMENT IS_GENERATED ALWAYS GENERATION_EXPRESSION `a` + interval 1 month --- --- TABLE_CATALOG def TABLE_SCHEMA test TABLE_NAME t1 COLUMN_NAME d ORDINAL_POSITION 4 COLUMN_DEFAULT NULL IS_NULLABLE NO DATA_TYPE timestamp CHARACTER_MAXIMUM_LENGTH NULL CHARACTER_OCTET_LENGTH NULL NUMERIC_PRECISION NULL NUMERIC_SCALE NULL DATETIME_PRECISION 6 CHARACTER_SET_NAME NULL COLLATION_NAME NULL COLUMN_TYPE timestamp(6) COLUMN_KEY EXTRA STORED GENERATED PRIVILEGES select,insert,update,references COLUMN_COMMENT IS_GENERATED ALWAYS GENERATION_EXPRESSION ROW START --- --- TABLE_CATALOG def TABLE_SCHEMA test TABLE_NAME t1 COLUMN_NAME e ORDINAL_POSITION 5 COLUMN_DEFAULT NULL IS_NULLABLE NO DATA_TYPE timestamp CHARACTER_MAXIMUM_LENGTH NULL CHARACTER_OCTET_LENGTH NULL NUMERIC_PRECISION NULL NUMERIC_SCALE NULL DATETIME_PRECISION 6 CHARACTER_SET_NAME NULL COLLATION_NAME NULL COLUMN_TYPE timestamp(6) COLUMN_KEY EXTRA STORED GENERATED PRIVILEGES select,insert,update,references COLUMN_COMMENT IS_GENERATED ALWAYS GENERATION_EXPRESSION ROW END --- --- drop table t1;