当两个或三个连接到它的连接同时修改同一个表(甚至同一行)时,SQL数据库如何防止发生损坏?
我在想一种理论上可能发生在具有多个基于服务器的负载平衡前端的数据库上的可能性:
- 服务器 1 访问中央数据库
- 服务器 2 访问中央数据库
- 服务器 1 在中央数据库中获取用户 X 的信息
- 服务器 2 在中央数据库中获取同一用户 X 的信息
- 服务器 1 在完成一些工作后在中央数据库中为用户 X 设置新数据(可以是执行或不执行事务)
- 服务器 2 在中央数据库中为用户 X 设置新数据
此时用户 X 将包含无效条目,因为它基本上覆盖了服务器 1 刚刚对同一用户所做的工作。
我正在考虑不断检查同一个表和行,看看它最近是否被修改过,但仍然没有什么能阻止同一个表和行在它检查的时间和它检查后写入数据库的时间之间被其他东西修改。
我只是想了解拥有数百万用户的大型数据库是如何工作的,以及它们如何分布在数十或数百个单独的服务器上。
数据库事务完整性是我正在寻找的。
阅读的好链接:
technet.microsoft.com/en-us/library/ms173763.aspx
http://en.wikipedia.org/wiki/Isolation_%28database_systems%29#Isolation_Levels.2C_Read_Phenomena_and_Locks
谢谢