`
webcode
  • 浏览: 6173198 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

利用timestamp避免更新冲突

 
阅读更多

SQL Server 里有数据类型 timestamp,这里我们将利用 timestamp 来避免更新冲突。

比如一个内容管理系统,A 正在编辑某一篇文章,B 也正在编辑该文章,A 和 B 都不知道对方在编辑这篇文章,双方保存后,都以为已经成功保存,实际上,数据库中只保存了最后提交的记录(先提交的记录被覆盖),这就造成了数据库中的数据与操作者所认为的不一样。

要避免这种更新冲突,一种方法可以采用模拟锁的形式,一个人在编辑另一个人就不允许编辑,但比较麻烦,由于这种更新冲突并非常见,投入较大精力在这上面,不值。这里使用 timestamp 轻松实现避免更新冲突。

1、表中增加一个字段 tmstmp,类型为 timestamp,参见SQL Server中timestamp(时间戳)

2、编辑文章时。增加一个隐藏域 <input type="hidden" name="timestamp" value="<%=rs("tmstmp")%>">,参见如何显示timestamp的值

3、更新文章时。
sql = "update ... where id=" & id & " and tmstmp=" & tmstmp
conn.Execute sql, effectLines
if effectLines <= 0 then
'更新失败,可能是原记录不存在,或者更新冲突
end if



有朋友反应response.Write(rs("[timestamp]")),是一片空白,可是在查询分析器中看到的是一串数字。这种情况下,在写SQL语句时这样写,select (字段名+0) as 别名,输出时就会有显示了。
分享到:
评论

相关推荐

    Hibernate中,利用版本管理机制来控制事务并发

    3. 避免过度使用乐观锁:在高并发场景下,如果数据冲突频繁,可能需要考虑其他并发控制策略。 综上所述,Hibernate的版本管理机制是其强大并发控制能力的重要组成部分,通过合理利用这一特性,开发者可以在保证数据...

    数据库性能优化

    引入timestamp字段和冲突检测机制,可以确保数据的完整性和一致性。 7. **谨慎使用text数据类型**:text类型在查询和存储上效率较低,如果可能,尽量使用varchar替代,以节省空间并提高查询效率。 8. **避免索引列...

    ETL SSIS文档

    - **并发控制**:在多用户环境中,当多个用户尝试同时编辑同一条记录时,时间戳可以帮助系统识别是否有其他用户已经对这条记录进行了更新,从而避免数据冲突。 - **版本追踪**:通过比较行的当前时间戳与先前的...

    高并发场景下如何保证接口幂等性?综合比较了防重令牌(token)、随机字符串(noncestr)、幂等表、防重表、数据库唯一索引

    这能防止并发更新导致的数据冲突,但在高并发环境下性能可能不如悲观锁。 在实际应用中,如某开放平台接入多种设备的案例,平台采用随机字符串+签名机制防止重放攻击,但遇到部分厂家重复生成随机串导致数据重复的...

    mysql开发规范文档

    - 表必须有主键,且不使用更新频繁的列,避免性能下降。 - 避免使用字符串列作为主键,不使用UUID、MD5或HASH。 - 默认使用非空唯一键,推荐自增主键。 - 重要的SQL必须被索引,包括WHERE、ORDER BY、GROUP BY等...

    On Optimistic Methods for Concurrency Control

    传统的并发控制方法主要依赖于锁定机制(Locking Mechanisms),即通过阻止其他事务访问正在被修改的数据项来避免冲突。然而,这种做法可能导致较高的等待时间、死锁等问题,并限制了系统的吞吐量。为了解决这些问题...

    用Oracle 10g新的行时间戳捕捉变化

    1. **数据同步**:在多源数据仓库环境中,可以识别出哪些数据是最新的,从而避免重复加载和数据冲突。 2. **数据审计**:跟踪数据的变更历史,帮助进行数据审计和合规性检查。 3. **数据恢复**:在灾难恢复或错误...

    三份数据库并发处理方案

    - **时间戳排序(Timestamp Ordering)**:根据事务开始时间决定其执行顺序,避免冲突。 - **乐观锁**:在事务提交时检查是否有冲突,若无冲突则提交,若有则回滚。 4. **死锁**:当两个或更多事务相互等待对方...

    WangT002.zip

    并发处理是抢单任务的关键,因为多个用户可能同时尝试抢单,如何保证公平性、避免数据冲突,以及提高系统性能是设计这类系统时需要考虑的核心问题。"SSM"是Spring、Spring MVC和MyBatis三个开源框架的组合,常用于...

    NoSQL数据库技术银联分布式缓存的异地多活实践V2.pdf

    - 在银联的系统中,如果两个中心同时更新同一个键,LWW-Element-Set会选择保留时间戳较新的那个值,以此避免数据丢失。 5. 应用场景: - 分布式缓存:银联的UPREDIS服务器集群采用分片复制的方式,实现了数据的...

    阿里巴巴开发规范

    - 依赖管理:合理控制依赖版本,避免版本冲突,使用自动化工具管理依赖。 - 遵循框架最佳实践:如使用Spring的AOP进行切面编程,利用MyBatis的动态SQL简化操作。 4. 版本控制与协同开发: - Git 使用:遵循Git...

    银联分布式缓存的异地多活实践.pdf

    通过过滤掉相同server-id的日志,避免了自我回放,同时利用断点续传机制,确保了在传输中断后能从上次中断的位置继续传输,从而提高数据一致性。例如,上海中心和北京中心的AOF-BINLOG数据会进行同步,但会过滤掉...

    PHP时间戳使用实例代码

    例如,在银行交易场景中,如描述中所提到的,为了避免并发更新导致的数据不一致,我们可以利用时间戳作为判断数据是否已更改的标志。当银行A和银行B尝试修改同一笔账户余额时,它们会先读取当前的时间戳和账户余额。...

    Oracle数据库误删除数据的不同恢复方法整理

    ### Oracle数据库误删除数据的不同恢复方法 ...合理利用这些工具和技术,不仅可以避免数据丢失的风险,还能最大限度地减少对业务的影响。当然,在实际操作过程中还需要根据具体情况选择最适合的恢复方案。

    CSCW环境下博士CAD系统中的并发控制机制研究.pdf

    并发操作控制机制的设计准则,依据于并发操作的特点,其主要目的是确保数据的一致性和操作的正确性,避免因为数据访问冲突造成的一致性问题。本文中,作者白大伟和史维峰提出了一种基于语义的并发操作控制机制,并...

    MySQL数据库设计SQL规范.doc

    - `TIMESTAMP`比`DATETIME`更节省空间,且具备自动赋值和更新的特性,适用于记录时间戳。 遵循这些规范,可以有效提高MySQL数据库的设计质量,优化查询性能,同时确保数据的安全性和一致性。在实际项目中,开发者...

    IdWorker.txt

    这种ID通常用于数据库主键、消息队列等场景,可以有效地避免由于ID冲突带来的问题。 ### IdWorker类设计 #### 类成员变量解析 - **`workerId`**:表示当前节点(服务器)的ID,采用5位二进制表示,因此最大值为31...

    Datastage的使用心得及unix应用

    5. 插入更新操作:尽量避免使用insert or update,因其效率低,可考虑先删除目标表中重复记录,再进行插入操作。 6. 日期型数据处理:Datastage的日期格式默认为timestamp,针对不同数据库(如Oracle、Informix)...

    javascript实现队列动画

    队列动画的基本思想是将一系列动画动作按照一定的顺序组织起来,确保一个动作完成后再执行下一个,从而避免动画之间的冲突和混乱。 首先,我们要理解队列的概念。队列是一种先进先出(FIFO)的数据结构,也就是说,...

    Oracle10gFlashback实践.doc

    通过使用SCN(System Change Number)而不是timestamp,可以确保在同一个SCN下的所有记录都保持一致,避免因时间点不同导致的数据冲突。 总之,Oracle 10g的Flashback技术提供了一套全面的数据恢复和错误修正方案,...

Global site tag (gtag.js) - Google Analytics