Timestamp(时间戳)在事务中主要用于并发控制、版本管理、顺序保证和一致性判断。不同数据库和场景下的应用方式略有差异,下面从核心概念 → 常见用法 → 示例 → 注意事项系统说明。
✅ 常见于:
数据库内部使用时间戳判断:
例如:
trx_idroll_pointer你不直接使用,但事务隔离级别依赖它。
CREATE TABLE orders (
id BIGINT PRIMARY KEY,
amount DECIMAL(10,2),
version INT,
update_time TIMESTAMP
);
START TRANSACTION;
-- 1. 读取数据
SELECT amount, version
FROM orders
WHERE id = 1;
-- 2. 业务逻辑处理
-- 3. 更新时校验
UPDATE orders
SET amount = 200,
version = version + 1,
update_time = CURRENT_TIMESTAMP
WHERE id = 1
AND version = 旧版本;
COMMIT;
✅ 如果:
version 没变 → 更新成功version 变了 → 更新 0 行 → 事务失败update_time TIMESTAMP(6)
UPDATE orders
SET amount = 200,
update_time = CURRENT_TIMESTAMP(6)
WHERE id = 1
AND update_time = :old_update_time;
⚠️ 注意:
| 方案 | 说明 |
|---|---|
| 全局递增 ID | Snowflake |
| 混合逻辑时钟 | HLC |
| TSO | TiDB / CockroachDB |
| 数据库时间戳 | 不推荐做全局顺序 |
| 隔离级别 | 与时间戳关系 |
|---|---|
| Read Uncommitted | 几乎不使用 |
| Read Committed | 使用时间戳判断提交 |
| Repeatable Read | 使用事务开始时间戳 |
| Serializable | 时间戳 + 锁 |
AND update_time = NOW()
❌ 错误
原因:
NOW() 可能相同✅ 正确:
TIMESTAMP 秒级 → 并发冲突
✅ 使用:TIMESTAMP(6)
✅ 用:
Timestamp 在事务中主要用于判断数据是否被并发修改,从而保障一致性和隔离性。
| 场景 | 推荐 |
|---|---|
| 单库事务 | version 字段 |
| 高并发 | 乐观锁 |
| 分布式 | 逻辑时钟 / TSO |
| 数据库内部 | 依赖 MVCC |
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。