支持为TIMESTAMP和DATETIME类型列设置ON UPDATE自动更新时间,即更新表中其他列数据时,该列会自动更新记录当前时间戳。
列定义子句中新增ON UPDATE自动更新选项。支持建表、修改表(添加列、修改列)时使用<列定义子句>中的“ON UPDATE <自动更新表达式>”设置自动更新时间。
<列定义子句> ::=
DEFAULT <列缺省值表达式> |
<自增列子句> |
<列级约束定义> |
DEFAULT <列缺省值表达式> <列级约束定义> |
<自增列子句> <列级约束定义> |
<列级约束定义> DEFAULT <列缺省值表达式> |
<列级约束定义> <自增列子句> |
ON UPDATE <自动更新表达式>
注意事项:
create table t1(c1 int, update_time timestamp on update now);
insert into t1 values(1, NULL);
SQL> select * from t1;
行号 C1 UPDATE_TIME
1 1 NULL
SQL> update t1 set c1 = c1 + 1;
影响行数 1
SQL> select * from t1;
行号 C1 UPDATE_TIME
1 2 2023-05-18 10:54:59.755000
2.当更新语句设置其他列新数据为当前值,即数据没有发生变化时,自动更新列并不更新;
SQL> update t1 set c1 = 2;
影响行数 1
SQL> select * from t1;
行号 C1 UPDATE_TIME
1 2 2023-05-18 10:54:59.755000
3.显式更新优先级高于自动更新,显式对自动更新列更新时,其值被修改为指定值;
SQL> update t1 set c1 = c1 + 1, update_time = '2023-01-01 00:00:00.000000';
影响行数 1
SQL> select * from t1;
行号 C1 UPDATE_TIME
1 3 2023-01-01 00:00:00.000000
4.是否自动更新的判断依据只有UPDATE语句中使用SET显式更新的项,忽略引用约束引发的数据更新;
create table t2(c1 int primary key, update_time timestamp on update now);
create table t3(c1 int references t2(c1) on update cascade, update_time timestamp on update now);
insert into t2 values(1, NULL);
insert into t3 values(1, NULL);
SQL> select * from t2;
行号 C1 UPDATE_TIME
1 1 NULL
SQL> select * from t3;
行号 C1 UPDATE_TIME
1 1 NULL
SQL> update t2 set c1 = c1 + 1;
影响行数 1
SQL> select * from t2;
行号 C1 UPDATE_TIME
1 2 2023-05-18 11:16:24.570000
SQL> select * from t3;
行号 C1 UPDATE_TIME
1 2 NULL
5.是否自动更新的判断依据是SET显式设置的值,不关心对UPDATE动作创建的触发器中替换的新行值;
drop trigger tri1;
delete * from t1;
insert into t1 values (1, NULL);
SQL> select * from t1;
行号 C1 UPDATE_TIME
1 1 NULL
SQL> create trigger tri1 before update on t1
2 for each row
3 begin
4 set new.c1 = old.c1;
5 end;
6 /
操作已执行
SQL> update t1 set c1 = c1 + 1;
影响行数 1
SQL> select * from t1;
行号 C1 UPDATE_TIME
1 1 2023-05-18 11:20:25.682000
6.不允许分区列/分布列设置ON UPDATE自动更新
7.自动更新的判断依据涉及大字段列时,不比较具体数据,直接视作大字段列数据已发生变化
8.各类型表在各环境下使用UPDATE语句均支持自动更新,包括普通表、HUGE表、视图,在各单机和集群环境下使用UPDATE语句。
tabledef等获取表定义的函数,dimp/dexp工具中,支持新增的ON UPDATE选项。
文章
阅读量
获赞