matrixorigin / matrixorigin/matrixone
[Compatibility]: ON UPDATE CURRENT_TIMESTAMP refreshes on no-op UPDATE
- Dominant language
- Go
- Stars
- 1.9k
- Forks
- 311
- Avg merge
- 1d 3h
- Merged PRs (30d)
- 768
Description
## 现象
在 MatrixOne main `99ed717b769e261b842c2f17345bd65865fc1470`:
```sql
CREATE TABLE t (
id INT PRIMARY KEY,
payload INT NOT NULL,
ts TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6)
ON UPDATE CURRENT_TIMESTAMP(6)
);
INSERT INTO t(id,payload) VALUES (1,10);
SELECT ts FROM t WHERE id=1;
UPDATE t SET payload=payload WHERE id=1;
SELECT ts FROM t WHERE id=1;
```
第二次查询中的 `ts` 已被刷新,即使 `payload` 没有实际变化。批量更新和真正修改列时刷新符合预期,事务回滚也能恢复原值。
## 期望
当 `UPDATE` 没有改变任何其他列的值时,`ON UPDATE CURRENT_TIMESTAMP` 列应保持原时间戳;只有行内容实际发生变化时才自动刷新。
## 影响
幂等 UPDATE、同步重放和 ORM 自动更新会产生虚假的修改时间,破坏增量抽取和审计逻辑。
## 复现信息
- MatrixOne main: `99ed717b769e261b842c2f17345bd65865fc1470`
- 重复执行 3 次,结果一致(时间值不同,但每次 no-op 都发生刷新)
Contributor guide
Assessment
This issue has not been assessed yet.