读取记录要用SQL事务吗?SQL事务用于插入、更新,但它应该用于读取记录吗?如果您要在一个查询中查找所有记录,然后一次将它们全部拉回,则没有必要。一切都包含在隐式交易中。也就是说,即使你拿到了一百万条记录,即使其他进程在改变记录,你也会在同一时间点看到所有一百万条记录的内容。在只读进程中,您真正需要事务(通常是特定的锁定提示)的唯一时间是:-您读取了一条“吃掉”的记录,并且在尝试时不需要更改值。[就像ADO中的串联记录集一样,然后将游标传递过去。]-您读取了一些数据,进行了一些计算,然后读取了一些相关数据,但假设平均时间不会改变任何东西。简而言之,当您想要阻止其他进程在SQL语句之间弄乱数据时,您需要事务。纯读取不需要事务包装。在您的SQL语句中,锁定提示应注意返回正确的数据(http://msdn.microsoft.com/en-us/library/aa213026%28SQL.80%29.aspx)。在服务器级别,您可以设置事务隔离级别(http://msdn.microsoft.com/en-us/library/ms173763.aspx)。编辑解释纯读取如果所有SQL语句都有这些类型的读取,那么您不需要包装事务SELECTCol1,Col2FromTable1INNERJOINTable2ONTable1.Id=Table2.Table1Id如果您正在阅读可能会受到其他影响并行交易受影响的结果必须包装在交易中。例如:BEGINTRANSACTIONINSERTINTOAccountTransactions(Type,Amount)Values('Credit',43.21)UPDATEAccountSummarySETBalance=Balance+43.21SELECT@Balance=BalanceFROMAccountSummaryCOMMITTRANSACTION没错,你只是在恢复余额,但是整个货币交易必须在两个地方进行。如果您需要最新的毫秒信息,您可以使用从TransactionOptions构造的TransactionOptions,其IsolationLevel为Serializable。这会影响性能,因为它会锁定表(或表的一部分),因此您需要确定是否真的需要它。对于大多数用途,如果您正在进行读取,则不需要围绕它包装事务(假设您只在一次操作中进行读取)。这实际上取决于您的应用程序、它需要什么数据以及它如何使用它。例如,如果您根据结果执行读写或更新,但您刚刚读取的数据是最新的很关键,您应该将整个逻辑包装到一个事务中。不,通常你不需要事务来读取数据,它也会减慢数据读取速度。我建议你阅读原子这个词。这有助于您了解交易的目的。可以进行交易,但它的目的是什么?您可以使用SETTRANSACTIONISOLATIONLEVEL语句为整个SQLServer会话设置适当的隔离级别。这是SQLServer联机丛书的语法:SETTRANSACTIONISOLATIONLEVEL{READCOMMITTED|阅读未提交|可重复阅读|SERIALIZABLE}锁定MicrosoftSQLServer。在事务中修改某些内容时,可以使用read语句在提交之前检查操作是否生效。事务旨在避免当一个逻辑事务实际映射到多个SQL查询时出现并发问题。例如,对于一个银行账户,如果您将钱从一个账户转移到另一个账户,您将从该账户中减去金额并将其添加到另一个账户(反之亦然)。但是,如果您的数据库之间出现问题,则它处于无效状态(您可能已从一个帐户中减去金额但未将其添加到另一个帐户)。因此,如果您在一次查询中读取所有数据,则不需要事务。以上就是C#学习教程:读记录要不要用SQL事务?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
