Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-为什么是事务?_Sql - Fatal编程技术网

SQL-为什么是事务?

SQL-为什么是事务?,sql,Sql,我才意识到我头痛了好几年了。嗯,用比喻来说。实际上,我在查看我的数据库结构时,不知怎的才意识到我从不使用事务。Doh 互联网上有很多关于交易的数据(开始交易,回滚,提交,等等),但令人惊讶的是,关于它们为什么至关重要,以及到底有多重要的细节却不多 我理解处理问题的概念。例如,当一个人一次在多个表中执行多个更新时,这是有意义的,但据我所知,这是一种不好的做法,我不这样做。我所有的查询只更新一个表。如果查询出错,它将取消、事务或无事务。除了从服务器中拔出插头之外,还有什么可能会出错或可能损坏单表更新

我才意识到我头痛了好几年了。嗯,用比喻来说。实际上,我在查看我的数据库结构时,不知怎的才意识到我从不使用事务。Doh

互联网上有很多关于交易的数据(
开始交易
回滚
提交
,等等),但令人惊讶的是,关于它们为什么至关重要,以及到底有多重要的细节却不多

我理解处理问题的概念。例如,当一个人一次在多个表中执行多个更新时,这是有意义的,但据我所知,这是一种不好的做法,我不这样做。我所有的查询只更新一个表。如果查询出错,它将取消、事务或无事务。除了从服务器中拔出插头之外,还有什么可能会出错或可能损坏单表更新

换句话说,我的问题是

在我所有的表上实现事务到底有多重要?我完全亵渎没有它们,或者这真的有那么重要吗? 更新
+1致invisal,他指出查询会自动包装为事务,我不知道这一点。指出了关于我的问题的多个很好的参考。

这取决于您是否正在更新一个表和一行,那么唯一的优势是日志记录。。。但如果一次更新表中的多行。。。如果没有交易,您仍然可能会遇到一些问题

例如,当一个人进行多个更新时,这是非常有意义的 例如,在多个表中一次完成。但是基本上我所有的查询 只需一次更新一个表。如果查询出错,它将取消, 交易或无交易

在你的情况下,它没有任何作用。单个语句本身有自己的事务。有关更多信息,您可以阅读现有的问题和答案:


数据库最重要的属性是可靠地保存数据

数据库可靠性是通过遵循原则(原子性、一致性、隔离性、持久性)来保证的。在数据库上下文中,对数据的单个逻辑操作称为事务。没有交易,这种可靠性就不可能实现


除了可靠性之外,正确使用事务还可以显著提高某些数据操作的性能。例如,您可以启动事务,插入大量数据(例如100k行),然后才提交。在调用commit之前,服务器不必实际写入磁盘,从而有效地对内存中的数据进行批处理。这可以大大提高性能。

这取决于,
SQL
通常用于支持某些主机语言的数据,如
c
c++
java
php
c
等。嗯,我没有使用太多的技术。。但如果您使用以下组合,那么我的观点如下:

SQLC/C++需要提交

SQLJava不需要

SQL带有C不需要

SQLPHP不需要

这还取决于您使用的是哪种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,我相信这些链接包含了一个很好的解释。对我来说,我从不将事务用于一条语句。对于单语句,我在中仅将其用于单元测试。我总是使用它将许多语句组合到单个事务中,以确保数据的完整性。这将如何提高性能?服务器仍然有