在使用数据库时,使用事务通常是必不可少的.例如,假设我要从帐户A向帐户B转账一笔钱,这涉及两个查询:

  • 减少帐户A中的钱
  • 在帐户B中增加它.

从理论上讲,我可以单独进行查询,但会出现错误.因此,可以肯定的是,我可以将这两个查询打包到一个事务中,并确保这两个操作要么定期结束,要么什么都没有改变.货币不会消失,也不会被创造.

问题是,在我看来,这只会将责任从我转移到数据库供应商身上.现在,这取决于数据库来执行这两个操作,并确保要么都执行了,要么什么都没有更改.数据库开发人员面临的问题与错误发生的问题相同.

数据库供应商使用什么技术来确保事务的安全?

推荐答案

维基百科上的ACID - Implementations页将让你开始预写日志(log)、影子分页和多版本并发控制.请按链接查找更多信息.

每个DBMS供应商都实现了他们自己的算法,通常是根据上下文、完全ACID或宽松需求、分布式事务一致性需求等来实现几种不同的算法.

Database相关问答推荐

使用 golan 查询 mongodb 中的集合并返回 id 作为字符串

如何决定使用数据库事务

生产中的超大型 Mnesia 表

Spring Data JPA 对 SQL 注入安全吗

是否有一个简单的工具可以将 mysql 转换为 postgresql 语法?

SQL Select 用字符串替换整数

免费的 SQL 比较工具

TSQL - 表值函数中的 If..Else 语句 - 无法通过

Entity Framework:如何检测对数据库的外部更改

MongoDB:查询具有两个相等字段 $match 和 $eq 的文档

多少个外键才算太多?

用于 sql server 的免费国家、城市数据库

The method setListAdapter(ArrayAdapter) is undefined for the type create

:force => true 在模式文件中是什么意思

将 Android Room 数据库与 Firebase 实时数据库相关联

在 SQL Server 2005 中将数据库从一个驱动器移动到另一个驱动器的正确方法是什么?

用于存储文件夹系统的数据库模式的 Select

如何使用 group_concat 引用值

分离实体和被管理实体

如何将空值传递给外键字段?