普通查询和加锁读有什么区别啊?

普通查询和加锁读有什么区别啊?

1 个赞

@论坛小助手

1 个赞

普通查询与加锁读的区别

根据文档库中的信息,以下是普通查询与加锁读之间的主要区别:

  1. 普通查询

    • 普通查询即执行标准的 SELECT 语句,不会对数据行添加任何锁。例如:SELECT * FROM t; 这种类型的查询在并发环境中允许其他事务同时读取和修改相同的数据。
    • 它适用于大多数情况下的数据检索操作,尤其是当不需要控制并发访问或保证数据一致性时。
  2. 加锁读 (SELECT … LOCK IN SHARE MODE)

    • 当执行带有 LOCK IN SHARE MODE 的查询语句时,会在查询的数据行上设置共享模式锁定。这意味着,在当前事务提交之前,其他事务可以读取这些行,但不能对其进行修改。例如:SELECT * FROM t WHERE id = 1 LOCK IN SHARE MODE;
    • 使用该语法可以在一定程度上防止其他事务在同一时间修改被锁定的数据行,从而实现更严格的读一致性。但是,正如文档中提到的,由于使用写锁来实现这种功能,可能会导致不同的读操作之间产生阻塞,影响系统性能。
    • 锁定查询结果 LOCK IN SHARE MODE

总结来说,选择使用哪种方式取决于您的应用场景对数据一致性和并发性的需求。如果需要确保读取的数据在读取过程中不被其他事务修改,那么可以考虑使用 SELECT ... LOCK IN SHARE MODE;但在性能敏感的应用场景中,则建议避免使用以减少潜在的性能问题。

具体信息可参考以下文档:

  1. 列存 FAQ
  2. 概述
  3. LOCK_SCHEMA_STATS
  4. 锁定查询结果 LOCK IN SHARE MODE
  5. 锁表
  6. 单表查询
  7. 其他命名规范