mysql autocommit的差异

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

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

先看python连接方式的:

150517 13:34:00     3 Connect   [email protected] 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   [email protected] 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.

时间: 2024-12-11 11:42:19

mysql autocommit的差异的相关文章

MySQL和MSSQL差异(增量)备份的原理

MySQL和MSSQL差异(增量)备份的原理 对于真正的增量备份来说,只需要记录当前每页最后的检查点的LSN,如果大于之前全备时的LSN,则备份该页面,否则不用备份 这大大加快了备份速度和恢复时间,同时这也是xtrabackup工具增量备份原理 MSSQL 完整备份 f 差异备份 f f

Oracle与MySQL的转化差异

1.nvl函数. Oracle 中 : nvl (join_count , 0) MySQL中:if(join_count is null,'0',join_count) 2.字符串连接. Oracle中用"||"进行连接:MySQL中用CONCAT进行连接. 3.系统时间. Oracle中:select sysdate from dual MySQL中:select sysdate() from dual 4.DECODE函数. MySQL中:DECODE(HANDLE_STATUS

【SQL】 MySql与SqlServer差异比较

本文主要记录将数据库从SqlServer移植到MySql的过程中,发现的各种坑爹问题.以SqlServer为主,记录MySql的差异性. 1.IF语句 首先MySql中的的IF语法不同. IF Condition THEN -- todo ELSE IF Condition THEN -- todo ELSE -- todo END IF; 其次,MySql中的IF语句,只能在存储过程或函数中执行,不能直接在查询中执行.(坑爹!!!)

MySQL与Oracle 差异函数比较

编号 类别 ORACLE MYSQL 注释 1 数字函数 round(1.23456,4) round(1.23456,4) 一样: ORACLE:select round(1.23456,4) value from dual MYSQL:select round(1.23456,4) value 2 abs(-1) abs(-1) 功能: 将当前数据取绝对值 用法: oracle和mysql用法一样 mysql: select abs(-1) value oracle: select abs(

Mysql查询 主从复制及引擎管理

禁用邮件通知: vi /etc/profile 在末尾添加 #禁止邮件提示 unset MAILCHECK 数据库部署及引擎管理 数据库简介 数据库技术构成1.数据库系统 DBS A.数据库管理系统(DataBase Management System, DBMS): SQL(RDS): ORACLE.Oracle MySQL.MariaDB.Percona server.DB2 NoSQL: Redis.MongoDB.MemcacheB.DBA数据库管理员 2.SQL语言(Structure

我的MYSQL学习心得(一)

我的MYSQL学习心得(一) 使用MYSQL有一段时间了,由于公司使用SQLSERVER和MYSQL,而且服务器数量和数据库数量都比较多 管理起来比较吃力,在学习MYSQL期间我一直跟SQLSERVER进行对比 第一期主要是学习MYSQL的基本语法,陆续还有第二.第三.第四期,大家敬请期待o(∩_∩)o 语法的差异 我这里主要说语法的不同 1.默认约束 区别:mysql里面DEFAULT关键字后面是不用加括号的 --sqlserver CREATE TABLE emp ( id INT DEFA

mysql 性能分析套件

#!/usr/local/python3.5/bin/python3.5 #!coding:utf-8 #################################### #目地:用于诊断mysql性能问题 #作者:蒋乐兴 #时间:2016-07-02 #create user [email protected]'127.0.0.1' identified by '[email protected]'; # #################################### impo

oracle to mysql

mysql:如何将百万级别的数据从oracle转移到mysql中 http://blog.csdn.net/hwhua1986/article/details/53257427 oracle到mysql的迁移步骤及各种注意事项 http://www.2cto.com/database/201305/210248.html MySQL与Oracle 差异比较之一数据类型 http://www.cnblogs.com/HondaHsu/p/3641116.html MySQL与Oracle 差异比较

ubuntu mysql安装及需要其他主机连服务器mysql时的设置(error:10061)

说明: 一个朋友在使用ubuntu-server 16.04安装mysql,设置远程访问的时候出现了问题,请我帮忙.但是,我也没有使用过ubuntu安装mysql,于是乎搜索了很多技术文件,比着葫芦画瓢.但是,由于mysql版本的差异,导致在安装设置的过程中出现了一些问题:就是不能远程访问. 一.安装mysql 1. 安装需要使用root账号,如果不会设置root账号的请自行google.安装mysql过程中,需要设置mysql的root账号的密码,不要忽略了. sudo apt-get ins