文档章节

mysql autocommit的差异

x
 xiangel
发布于 2015/05/17 19:29
字数 632
阅读 232
收藏 2

用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
0
mysql之innodb引擎使用方法

前言 闲来无事做不如MySQL。 一.简介: 1.Linux下使用MySQL数据库时,为了支持事务操作需要用到InnoDB引擎,对于表中处理的插入,更新等操作失败时 ,回滚前面不应该完成的操作是必须的. 2.一般M...

李伟铭k
07/09
0
0
【整理】MySQL 之 autocommit

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

摩云飞
2013/10/18
0
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
0
3
mysql优化--in或者or选择

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

spihiker
04/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

day58-20180816-流利阅读笔记-待学习

苹果市值破万亿,iPhone 会涨价吗? Lala 2018-08-16 1.今日导读 苹果教父乔布斯曾经说过:“活着就是为了改变世界。”虽然他在 56 岁时就遗憾离世,但他极具创新和变革的精神早已深埋进苹果...

aibinxiao
31分钟前
4
0
[雪峰磁针石博客]python3快速入门教程1 turtle绘图-2函数

菲波那契序列: >>> # Fibonacci series:... # the sum of two elements defines the next... a, b = 0, 1>>> while b < 10:... print(b)... a, b = b, a+b...112......

python测试开发人工智能安全
今天
0
0
java环境变量配置最正确的方式

原贴:https://blog.csdn.net/qq_40007997/article/details/79784711,十分详细,亲测有效

kitty1116
今天
0
0
49.Nginx防盗链 访问控制 解析php相关 代理服务器

12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置(502的问题) 12.16 Nginx代理 扩展 502问题汇总 http://ask.apelearn.com/question/9109 location优先级 http://blog....

王鑫linux
今天
2
0
Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部