SQL-为什么是事务?
我才意识到我头痛了好几年了。嗯,用比喻来说。实际上,我在查看我的数据库结构时,不知怎的才意识到我从不使用事务。Doh 互联网上有很多关于交易的数据(SQL-为什么是事务?,sql,Sql,我才意识到我头痛了好几年了。嗯,用比喻来说。实际上,我在查看我的数据库结构时,不知怎的才意识到我从不使用事务。Doh 互联网上有很多关于交易的数据(开始交易,回滚,提交,等等),但令人惊讶的是,关于它们为什么至关重要,以及到底有多重要的细节却不多 我理解处理问题的概念。例如,当一个人一次在多个表中执行多个更新时,这是有意义的,但据我所知,这是一种不好的做法,我不这样做。我所有的查询只更新一个表。如果查询出错,它将取消、事务或无事务。除了从服务器中拔出插头之外,还有什么可能会出错或可能损坏单表更新
开始交易
,回滚
,提交
,等等),但令人惊讶的是,关于它们为什么至关重要,以及到底有多重要的细节却不多
我理解处理问题的概念。例如,当一个人一次在多个表中执行多个更新时,这是有意义的,但据我所知,这是一种不好的做法,我不这样做。我所有的查询只更新一个表。如果查询出错,它将取消、事务或无事务。除了从服务器中拔出插头之外,还有什么可能会出错或可能损坏单表更新
换句话说,我的问题是
在我所有的表上实现事务到底有多重要?我完全亵渎没有它们,或者这真的有那么重要吗?
更新
+1致invisal,他指出查询会自动包装为事务,我不知道这一点。指出了关于我的问题的多个很好的参考。这取决于您是否正在更新一个表和一行,那么唯一的优势是日志记录。。。但如果一次更新表中的多行。。。如果没有交易,您仍然可能会遇到一些问题 例如,当一个人进行多个更新时,这是非常有意义的 例如,在多个表中一次完成。但是基本上我所有的查询 只需一次更新一个表。如果查询出错,它将取消, 交易或无交易 在你的情况下,它没有任何作用。单个语句本身有自己的事务。有关更多信息,您可以阅读现有的问题和答案:
除了可靠性之外,正确使用事务还可以显著提高某些数据操作的性能。例如,您可以启动事务,插入大量数据(例如100k行),然后才提交。在调用commit之前,服务器不必实际写入磁盘,从而有效地对内存中的数据进行批处理。这可以大大提高性能。这取决于,
SQL
通常用于支持某些主机语言的数据,如c
、c++
、java
、php
、c
等。嗯,我没有使用太多的技术。。但如果您使用以下组合,那么我的观点如下:
SQL与C/C++:需要提交
SQL与Java:不需要
SQL带有C:不需要
SQL与PHP:不需要
这还取决于您使用的是哪种SQL。它还取决于不同的SQL风格,如oraclesql
,sqlserver
,SQLite
,MySQL
等
当您在其控制台中使用Oracle SQL时,如Oracle 11g
,Oracle 10g
等提交是必需的
至于表和数据的损坏是的这是常有的事,我的经历很糟糕。因此,如果在更新表时拔出电线或其他东西,则可能会导致一场巨大的灾难
最后,我建议您进行提交。您应该知道,针对数据库的每个更新操作都是在一个事务中执行的,即使只有一个表(SQL server会自动为其创建一个事务)。
始终执行事务的原因是要确保像其他人提到的那样使用ACID。在这里,我想详细阐述一下隔离点。如果没有事务隔离,您可能会遇到以下问题:读取未提交、不可重复的读取、幻象读取……您有一个多年不在3NF中的数据库?i、 e.必须更新/插入多个表才能保持一致?否-恰恰相反。我从来都不需要一次更新多个表-这只是我的观点。当时一定是在使用米老鼠数据库设计-没有听说过3NF?请阅读3NFHanks,但我正在寻找一个更详细/更深入的答案,我在其他地方找不到,也就是说,是什么导致了这种腐败,如果没有明确要求提交,这并不意味着它没有发生——它肯定是的,是的。我也是这个意思。为什么语言会起作用?它们如何处理数据库API?就API而言,并非所有语言都有相同的API。像c/c++、python、cobol这样的语言有不同的API。没有像Java这样的标准API。特别是,当涉及c/c++时,你没有API,而是有连接接口,比如OCCI和Pro*c,这些API让你必须显式提交。啊,我不知道。谢谢你的链接-我正在研究这些。所以从技术上说我应该完全没问题?@dc2,我相信这些链接包含了一个很好的解释。对我来说,我从不将事务用于一条语句。对于单语句,我在中仅将其用于单元测试。我总是使用它将许多语句组合到单个事务中,以确保数据的完整性。这将如何提高性能?服务器仍然有