我的问题很简单:
- 交易
- 批次
- 连接和
- 声明
在 SQL Server 中?
据我所知,连接是 SQL Server 实例与客户端之间的单一通信通道,其中执行分组为批处理的语句集合。批处理隐式或显式映射到一个或多个事务。这是正确的吗?
答案1
相当多。
批处理就是一批需要执行的命令。事务是一组保证成功或全部失败的命令(即,不会完成一半命令而其余命令失败,如果一个命令失败,则所有命令都失败)。
据我所知,SQL Server 使用连接池,因此我不会依赖每个客户端一个连接的想法。
答案2
交易和批次是两个独立的概念。两者都可以在一对多配置中使用。
事务块是单个“工作单元”,即已提交的 SQL 必须完全工作或完全不工作。例如,如果您更新两个相互链接的表;两个表都必须成功才能提交数据更改。[https://msdn.microsoft.com/en-us/library/ms174377.aspx]
批处理是微软的概念。使用微软创建的工具(例如 sqlcmd 和 osql),批处理仅确保单一执行计划。例如,如果您创建一个变量并在批处理之外使用它,该工具将抛出错误。[https://msdn.microsoft.com/en-us/library/ms188037.aspx]
因此,您可以在一个事务块内有多个更新多个表的批处理。只要它们不违反单个批处理执行计划即可。
此外,在一个批次内,您可以有多个事务块,确保数据库实体(如表)之间的数据完整性。
连接只是批准在服务器上运行查询的通信握手。
语句是构成查询的单独行。GO(T-Sql 批处理分隔符)和 BEGIN TRANSACTION(用于启动新事务块的 ANSI SQL)都是语句。
答案3
批处理和事务存在于同一级别。批处理是一组原本不相关的 SQL 命令。事务是一组 SQL 命令,这些命令(就该数据库的所有其他用户而言)以一条语句的形式运行。