matrixorigin / matrixorigin/matrixone

[Compatibility]: ON UPDATE CURRENT_TIMESTAMP refreshes on no-op UPDATE

Open
#28,154 0 comments 0 reactions 1 assignee Claimed by @jiangxinmeng1 View on GitHub
kind/bug needs-triage
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.