问题标签 [autocommit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 在未处理的异常后使用 C# Mysql 连接器禁用 AutoCommit
我目前正在开发一个使用 MySql 作为后端数据库的 C# 应用程序。
不幸的是,我发现了一种我无法解释的有线行为。
我想使用事务来“组合”多个查询,以确保只执行所有命令或不执行任何命令。
但是,由于我的编码错误,交易过程中发生了未处理的异常。
我对事务的理解是,在这种情况下,事务会回滚。
尽管如此,我发现 Mysql 似乎默认启用 AutoCommit 并在断开连接后提交,因为未处理的异常导致崩溃。
所以我试图通过执行禁用它SET autocommit = 0
但这不起作用。
编辑: 我使用以下代码创建了事务:
其他人提到,使用 BEGIN 应该可以解决这个问题,但事实并非如此。在 Mysql 日志中执行以下查询:
当然我应该修复我的代码,这样就不会发生未处理的异常,但是有没有办法阻止 Mysql 这样做呢?
谢谢!
克里斯
git - 如何在 Git 中禁用特定文件的自动阶段
我有一个文件,我希望它成为存储库的一部分,但我不想在每次运行commit -a
我通常使用的命令时提交它的更改,但只有当我手动将它添加到暂存区域时。
Git可以吗?
为了清楚起见,它是一个二进制“输出”文件(电子表格),其中还包含一些关于如何处理数据的逻辑,所以我只想在更改其逻辑/结构而不是存储数据时提交它。
java - 如何使用提交保存所有查询,如果任何一个查询失败,则不应保存任何数据
我有一个员工表格。我使用选项卡式窗格来获取四个不同的选项卡。但问题是,如果我将数据保存在第一个选项卡上,它只会保存在数据库中。在其他选项卡上保存数据之前,我关闭了整个表单。所以在数据库中,我从第一个选项卡输入了数据,没有为其他选项卡保存数据……这给了我进一步处理的错误。我知道提交,但我不知道如何使用它????我必须要将表单所有选项卡中的所有数据保存到数据库,如果在表单之间关闭,则不应保存任何数据...请帮助我。
我想在java编程中使用它。每个选项卡的数据我都保存在自己的页面上,而不是最后。
php - 提交或回滚是否在 PHP 的 mysqli 中隐含地打开自动提交?
我正在使用 mysqli 类在 PHP 中进行交易,我发现 autocommit() 的文档非常不完整。我从示例中推断,将 autocommit 设置为 false 会隐式执行“开始事务”。这个对吗?更重要的是,我看不到自动提交在哪里被重置为 true,我认为它应该是在事务完成后。这会在调用 commit() 或 rollback() 方法时自动发生吗?
python - New rows not showing up after SQL INSERT & "commit" with Python and SQL
I made a loop in Python that calls itself to repeatedly check for new entries in a database. On first execution, all affected rows are shown fine. Meanwhile, I add more rows into the database. On the next query in my loop, the new rows are not shown.
This is my query-loop:
This is the SQL part of my Python insertion-script:
I tried SQLite, I tried Oracle MySQL's connector, I tried MySQLdb on a Windows and Linux system and all had the same problem. I looked through many, many threads on Stackoverflow that recommended to turn on autocommit or use commit() after an SQL statement (ex. one, two, three), which I tried and failed.
When I added data with HeidiSQL to my database it showed up in the loop query, but I don't really know why this is. Rows inserted with mysql-client on Linux and my Python insertion script never show up until I restart my loop script.
I don't know if it's the fact that I open 2 connections, each in their own script, but I close every connection and every cursor when I'm done with them.
java - mysql jdbc回滚不成功
我有一些 Java 代码使用 JDBC 连接到 MySQL 数据库,然后代码执行一些读取操作,然后进行一次更新,所有这些都使用相同的连接。如果有异常,则connection.rollback()
调用;如果没有异常,connection.commit()
则调用。在这个阶段,每次我运行测试时都会新创建连接(即它不是来自池)。我的代码只创建一个连接,并在整个测试过程中使用。
正在使用connection.setAutoCommit(false)
的连接在连接实例创建后立即调用。
由于某种原因,当出现异常并被connection.rollback()
调用时,事实证明我的更新已提交而不是回滚。
通过调试,我确认了以下内容,
调用后
connection.setAutoCommit(false)
,按预期connection.getAutoCommit()
返回 的值。false
此外,"Select @@session.autocommit"
返回值0
,表示自动提交已按预期关闭。在调用 之前
connection.rollback()
,同样的检查显示自动提交已关闭,正如预期的那样。connection.commit()
绝对没有被调用,并且connection.rollback()
肯定被调用。
我也尝试过显式运行该语句"rollback;"
,但它并没有解决我的问题。我还尝试"Set AUTOCOMMIT = 0;"
在创建连接后显式运行该语句。
我所有的表都使用 InnoDB 的存储引擎。通过 SQL Workbench,自动提交关闭,回滚和提交按预期工作。
我正在使用 MySQL 版本“5.0.91-community-nt”。MySQL jdbc 驱动版本为 5.1.19。我正在使用 Java 5。
有没有人对为什么我的更新被提交有任何建议,即使自动提交关闭,提交从未被调用,并且回滚被明确调用?
干杯。
grails - 当元素的位置在列表中更改时,grails 自动提交触发更新查询
我有一个场景,我需要将一个对象移动到数组列表的开头。
现在我有这样的东西
现在将 obj4 移动到列表的开头,我将它从列表中删除,如下所示
然后反转集合
当我这样做时,grails 会自动触发一些对象的更新查询
我尝试过的另一种方法是创建一个新列表,然后添加这样的元素
但在这种情况下,多个更新查询被触发,我根本没有触及对象。
请帮我调试一下
mysql - OpenJPA + Tomcat JDBC 连接池 = 陈旧数据
我在 Web 应用程序中使用带有 OpenJPA 的 Tomcat JDBC 连接池。应用程序看不到更新的数据。具体来说,另一个 java 应用程序在数据库中添加或删除记录,但 Web 应用程序永远不会看到这些更新。这是一个相当严重的问题。我一定缺少一些基本的东西。
如果我从实现中删除连接池,Web 应用程序会看到更新。就好像 Web 应用程序的提交永远不会在 Connection 上调用。
版本信息:
Tomcat JDBC 连接池:org.apache.tomcat tomcat-jdbc 7.0.21
OpenJPA:org.apache.openjpa openjpa 2.0.1
下面是创建 DataSource 的代码片段(DataSourceHelper.findOrCreateDataSource 方法):
下面是使用 DataSource 创建 EntityManagerFactory 的代码:
如果我像这样注释掉 DataSource,那么它就可以工作。请注意,OpenJPA 在 props 中有足够的信息来配置连接,而无需使用 DataSource。
所以不知何故,OpenJPA 和连接池的组合无法正常工作。
更新:
实际上,当底层数据库是 MySQL 时,它似乎会失败。如果底层数据库是 DB2,它在有和没有池的情况下都能正常工作。
更新#2:
我在池中添加了一个 JdbcInterceptor 以记录在连接上调用的方法。如果数据库是 DB2,则在创建 EntityManager 时调用 setAutoCommit(true)。当数据库是 MySQL 时,它不会被调用。
这将解释行为的差异。即使应用程序在 EntityManager 上调用提交,连接上也没有相应的提交。由于事务期间执行的所有查询都是只读的,因此 OpenJPA 似乎认为不需要提交。
这是来自 MySQL 的日志:
这是来自 DB2 的日志(注意 setAutoCommit):
自从发现这一点以来,我在创建 EntityManagerFactory 之前尝试将 autoCommit 设置为 true:
这没有效果。我已经阅读了关于 OpenJPA 将 autoCommit 设置为 false 的 stackoverflow 上的其他帖子,并且我在日志中看到了这一点,但仅在提交包含数据库更新的事务时。
我最近一直在检查 transactionIsolationLevel,结果发现 MySQL 的默认级别是 4,而 DB2 是 2。这是 java.sql.Connection 类中这些的定义。请注意,2 比 4 更轻松,所以这可能不是原因。
postgresql - Postgres 全局设置自动提交
如何在全局级别的 psql 8.4 中设置自动提交?是否有一个我可以更改的配置属性,它将为集群上的所有 dbs 引入此行为,以在关闭自动提交的情况下启动 db 会话?
php - 使用多个函数时的 MYSQL 自动提交
将尝试使这尽可能简单。我在函数中使用 throw/catch。该函数接受名称、描述和用户数组。它将名称和描述添加到一个表中,然后获取用户数组,并执行一个单独的函数将它们添加到连接器表中。我将功能设置为关闭自动提交,直到输入最后一个用户然后提交。问题是,如果其中一个用户未能进入(由于外键约束),则不会退出事务。我正在调用单独的函数这一事实是否会“重置”自动提交并导致它无法按预期工作?通过将回滚放在 Catch 子句中,我做错了吗?
希望我没有过度简化代码。任何帮助,将不胜感激。