【问题标题】:A newbie question about database transactions一个关于数据库事务的新手问题
【发布时间】:2009-04-23 02:16:35
【问题描述】:

我知道数据库事务是用来保证事务中的所有语句都会被执行或者都不执行。

但是锁定和线程安全呢?例如,如果我有一个影响多个表的存储过程,并且我在该存储过程中使用了一个事务,该存储过程是同时从不同的客户端调用的,这些事务是并行工作还是并行工作?他们会排队吗?换句话说,使用事务是否保证它将“锁定”所有其他客户端并导致它们等待事务完成?

SQL Server 和 MySQL 中的数据库事务还有什么区别吗?我的意思是他们的工作方式。

【问题讨论】:

    标签: sql mysql sql-server transactions


    【解决方案1】:

    取决于 DBMS,但存储过程通常不被锁定,数据库表中的行被锁定,这就是防止两个存储过程相互干扰的原因。

    这具有更精细的锁定粒度,因此不太可能引起争用。

    关于 SQLServer 和 MySQL 之间的差异,我不会在较低级别知道 - 它们很可能会做截然不同的事情。但它们在 SQL 标准方面将是相同的(否则它们将毫无用处)。

    【讨论】:

    • 如果要加,InnoDB锁表,MyISAM锁一行。在 MySQL 中。
    • @Ólafur Waage,其实恰恰相反
    • 您是说 MySQL(使用其中一个引擎,不清楚是哪个引擎)在事务期间锁定整个表吗?这似乎是一种可怕的方式。
    • 不完全是,MyISAM(锁定整个表的那个)不支持事务
    • 哦,好吧,那没关系... WTF ?? :-) 这实际上比表锁定更糟糕。所以我想对于 ACID 原则,MyISAM 不是要走的路。
    【解决方案2】:

    TStamper 已经提供了 SQL Server 与 MySQL 的链接,但如果您对一般事务行为感兴趣,请查看以下链接:

    http://www.oracle.com/technology/oramag/oracle/05-nov/o65asktom.html http://en.wikipedia.org/wiki/Isolation_(database_systems)

    隔离级别因 DBMS 而异。一些 DBMS 系统允许您配置隔离级别(较高的隔离级别通常意味着由于争用而导致的速度/吞吐量较低)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      相关资源
      最近更新 更多