Vadim Samokhin Asked: 2013-04-13 00:56:25 +0800 CST2013-04-13 00:56:25 +0800 CST 2013-04-13 00:56:25 +0800 CST 数据库原子操作实现 772 问题是关于未包含在“开始提交”块中的查询,而是关于在 PostgreSQL、MySQL(至少是 innodb 引擎)中是原子的普通插入和更新。那么这在内部是如何实现的呢? transaction database-internals 1 个回答 Voted Best Answer Mark Storey-Smith 2013-04-13T01:29:01+08:002013-04-13T01:29:01+08:00 为出现在显式事务块之外的每个语句启动一个事务。是否在语句之后自动发出提交取决于 RDBMS 配置。MySQL 有自动提交选项,SQL Server 有 IMPLICIT_TRANSACTIONS,PostgreSQL 总是自动提交。 后备数据库: 在标准中,没有必要发出 START TRANSACTION 来启动一个事务块:任何 SQL 命令都隐式地开始一个块。PostgreSQL 的行为可以看作是在每个不跟在 START TRANSACTION(或 BEGIN)之后的命令之后隐式发出 COMMIT,因此它通常被称为“自动提交”。其他关系数据库系统可能会提供自动提交功能以方便使用。 创新数据库: 在 InnoDB 中,所有用户活动都发生在一个事务中。如果启用了自动提交模式,则每个 SQL 语句都会自己形成一个事务。默认情况下,MySQL 在启用自动提交的情况下为每个新连接启动会话,因此如果该语句未返回错误,MySQL 会在每个 SQL 语句之后提交。 数据库服务器: SQL Server 在以下事务模式下运行。 自动提交事务——每个单独的语句都是一个事务。 显式事务——每个事务都以 BEGIN TRANSACTION 语句显式开始,并以 COMMIT 或 ROLLBACK 语句显式结束。 隐式事务——一个新的事务在前一个事务完成时隐式地开始,但是每个事务都是用 COMMIT 或 ROLLBACK 语句显式完成的。
为出现在显式事务块之外的每个语句启动一个事务。是否在语句之后自动发出提交取决于 RDBMS 配置。MySQL 有自动提交选项,SQL Server 有 IMPLICIT_TRANSACTIONS,PostgreSQL 总是自动提交。
后备数据库:
创新数据库:
数据库服务器: