文档章节

mysql autocommit的差异

x
 xiangel
发布于 2015/05/17 19:29
字数 632
阅读 226
收藏 2
点赞 0
评论 0

用python在开发一个小web站点时碰到一个问题,通过mysql客户端修改库中数据后(有做提交),在前台web页面刷新还是以前的数据。而另开一个mysql客户端查询是可以查询到值的。重启web服务后可以看到新值。而同样使用java的jdbc方式连接时同样的方式是可以看到新值的。

于是决定开启mysql的日志看看实际运行的SQL有什么差异.

先看python连接方式的:

150517 13:34:00     3 Connect   root@localhost on dw
                    3 Query     SET NAMES 'utf8' COLLATE 'utf8_general_ci'
                    3 Query     SET @@session.autocommit = OFF
                    3 Query     select id,name from job where id=5
150517 13:34:20     3 Query     select id,name from job where id=5
                    3 Quit

再来看看java的:

150517 13:39:08     5 Connect   root@localhost on dw
                    5 Query     /* mysql-connector-java-5.1.25 ( Revision: ${bzr.revision-id} ) */SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'ne
t_write_timeout' OR Variable_name = 'interactive_timeout' OR Variable_name = 'wait_timeout' OR Variable_name = 'character_set_client' OR Variable_name = 'character_set
_connection' OR Variable_name = 'character_set' OR Variable_name = 'character_set_server' OR Variable_name = 'tx_isolation' OR Variable_name = 'transaction_isolation'
OR Variable_name = 'character_set_results' OR Variable_name = 'timezone' OR Variable_name = 'time_zone' OR Variable_name = 'system_time_zone' OR Variable_name = 'lower
_case_table_names' OR Variable_name = 'max_allowed_packet' OR Variable_name = 'net_buffer_length' OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' O
R Variable_name = 'query_cache_size' OR Variable_name = 'init_connect'
                    5 Query     /* mysql-connector-java-5.1.25 ( Revision: ${bzr.revision-id} ) */SELECT @@session.auto_increment_increment
                    5 Query     SHOW COLLATION
                    5 Query     SET NAMES latin1
                    5 Query     SET character_set_results = NULL
                    5 Query     SET autocommit=1
150517 13:39:09     5 Query     select id,name from job where id=5
150517 13:39:29     5 Query     select id,name from job where id=5
                    5 Quit

乍一看上去觉得差不多,没什么差异。很是苦闷,于是再想另外的方法。启动2个python脚本来尝试,一个写,另一个读。

结果发现读的那个脚本可以马上读到新增的数据。于是对比了下读的脚本发现每次读完后有做commit。把commit去掉再试,问题重现。再回过头去看了下python脚本和java脚本生成的mysql日志的差异。发现

python:
 3 Query     SET @@session.autocommit = OFF
java:
5 Query     SET autocommit=1

查询mysql的文档

The autocommit mode. If set to 1, all changes to a table take effect immediately. If set to 0, you must use COMMITto accept a transaction or ROLLBACK to cancel it

autocommit=1时为自动提交即autocommit=ON.

接下来尝试了下postgresql,在autocommit=False时是可以查看到新数据的。

在看postgresql的python驱动的文档时发现有个不错的提示,转帖如下:

Warning

 

By default, any query execution, including a simple SELECT will start a transaction: for long-running programs, if no further action is taken, the session will remain “idle in transaction”, a condition non desiderable for several reasons (locks are held by the session, tables bloat...). For long lived scripts, either ensure to terminate a transaction as soon as possible or use an autocommit connection.


© 著作权归作者所有

共有 人打赏支持
x
粉丝 2
博文 8
码字总数 16097
作品 0
武汉
C++应用适配DRDS小结

前言 C++实现的业务系统已经支持MYSQL版本,本次改造主要适配DRDS(介绍见DRDS应用开发指南)。DRDS兼容MYSQL语法,适配起来很方便。DRDS本身不提供C++的客户端,本次使用社区版MYSQL客户端。...

通爸 ⋅ 02/09 ⋅ 0

【整理】MySQL 之 autocommit

mysql 默认是开启 auto commit 的。可以通过如下命令查看 session 级别和 global 级别的设置: mysql> select @@session.autocommit;+----------------------+| @@session.autocommit |+----......

摩云飞 ⋅ 2013/10/18 ⋅ 0

mysql存储过程包含事物的处理

mysql存储过程,包含:事物、in/out DROP PROCEDURE procuserregister;DELIMITER $$CREATE DELIMITER ; 使用:CALL procuserregister ('aaa','e2e2','aaa@q1.com',14874784,@msg);SELECT @m......

hanzhankang ⋅ 2013/11/25 ⋅ 3

mysql优化--in或者or选择

在数据库查询时,很多情况下会用到or或者in来过滤数据。这里比较下这二者的效率,看看哪个更适合使用场景。 测试平台:centos7x8664 mysql-5.7.18 创建表,插入测试数据(1000万条记录) my...

spihiker ⋅ 04/11 ⋅ 0

MySQL · 捉虫动态 · 5.7 mysql_upgrade 元数据锁等待

问题描述 如下图,mysqlupgrade 过程中,执行 DROP DATABASE IF EXISTS performanceschema 一直在等待 metadata lock 问题排查 简单粗暴的方法 有一种简单的解决方法,把其他连接kill掉,释放...

阿里云RDS-数据库内核组 ⋅ 2017/04/09 ⋅ 0

MySQL事务autocommit自动提交

MySQL默认操作模式就是autocommit自动提交模式。这就表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行。我们可以通过设置autocommit的值改变是否是自动提交autocom...

DYOS ⋅ 2015/03/07 ⋅ 0

Django 事务详解

Django 1.4 事务默认模式是autocommit模式,每个查询都相当于一个事务,每次查询都直接提交commit事务, 除非事务被禁止 Django’s default behavior is to run in autocommit mode. Each query...

cooffeelis ⋅ 2017/08/04 ⋅ 0

mysql事务提交模式

查看mysql的提交模式:select @@autocommit; ‘0’表示手动提交,‘1’表示自动提交 mysql默认是自动提交的,也就是你提交一个Query,它就直接执行。 set autocommit=0 禁止自动提交 set au...

Vincent-Duan ⋅ 2015/03/31 ⋅ 0

mysql start transaction 和 set autocommit = 0 的区别

1、set autocommit = 0 关闭当前会话中事务的自动提交,需要手动 commit 或者 rollback,相当于开启一个全局的事务。在 mysql 的事务中,默认 autocommit = 1,每一次 sql 操作都被认为是一个...

big_cat ⋅ 2016/11/10 ⋅ 0

Python+MySQL - Bulk Insert

I'm working with the MySQLdb module in Python to interact with a database. I have a situation where there is a very large list (tens of thousands of elements) which I need to in......

Airship ⋅ 2016/01/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部