首先按照网上的帖子,在my.ini的[MySqlD]下添加了一行init_connect='SET autocommit=0'。然后重启服务,select @@autocommit;结果为1,设置失败。后来直接运行set global init_connect="set autocommit=0";  后运行select @@autocommit;结果为1,设置又失败。最后百度出一篇文章,里面是直接set autocommit=0;后运行select @@autocommit;结果为0,设置成功,心情非常激动,重启了一下mysql服务,select @@autocommit;结果又变成1,设置又失败。
所以在这里请教各位达人,这玩艺该怎么玩啊?
还有,如果设置成功了,以后我的insert,update,delete语句后是不是都应该加一个commit了?
在这里先谢谢各位了

解决方案 »

  1.   

    在my.ini中设置,或者mysqld启动时加变量autocommit。 [mysqld]
     init_connect='SET AUTOCOMMIT=0'
      

  2.   


    这玩艺我真心加了。不管用啊[mysqld]]
    innodb-file-per-table=1init_connect='SET AUTOCOMMIT=0'
      

  3.   

    呵呵,看看你的登录用户是否有SUPER权限,有,去掉
      

  4.   


    取消掉了登录用户的SUPER权限,运行set global init_connect="set autocommit=0";  后运行select @@autocommit;结果为1,设置失败。又运行set autocommit=0;后运行select @@autocommit;结果为0,设置成功,重启mysql服务,select @@autocommit;结果又变成1,设置失败。
    还是不行啊。不过话说我直接去改my.ini,是不是跟登陆用户又没有SUPER权限关系不大啊
      

  5.   

    按上述修改my.ini,重新启动MYSQL,登录用户没有SUPER权限,设置是成功的
      

  6.   


    终于设置好了。谢了英雄~~~。话说这个SUPER权限用不用加回去啊这个权限是干嘛的啊,KILL进程的??
      

  7.   


    还有一个刚发生的问题得请教一下。改好了一台机器,SELECT @@autocommit;结果为0。然后我再另外一台机器上连那台改好的机器,结果竟然为1。难道这个设置是跟着用户走的吗?因为我觉得既然改的是my.ini文件,怎么着也是一个全局的吧。
      

  8.   

    难道这个设置是跟着用户走的吗?
    登录用户是同样的?去掉SUPER权限
      

  9.   

    如果用户有SUPER权限,默认为1,不能更改
    去掉SUPER权限,以MY。INI中的设置为准
      

  10.   

    autocommit  不是系统变量,是SESSION变量。
    init_connect如果用户有SUPER权限,则不会执行。建议还是在应用程序中明确使用 begin transaction
    [mysqld]
    init_connect='SET autocommit=0'Note that the content of init_connect is not executed for users that have the SUPER privilege. This is done so that an erroneous value for init_connect does not prevent all clients from connecting. For example, the value might contain a statement that has a syntax error, thus causing client connections to fail. [color=#FF0000]Not executing init_connect for users that have the SUPER privilege
     enables them to open a connection and fix the init_connect value
    [/color]
      

  11.   


    版主好。或者说如果应用程序中我明确的使用了Begin Transaction.我是不是可以不用设置这个东西??
      

  12.   

    不要设定autocommit这个开关, 让它保持autocommit=1这个默认状态.
    平常有查询\更新都是需要得到最新的数据, 根本不需要启动一个事务,除非有特定状况才需要开启事务, 再手工用start transaction ... commit /rollback.用2个开关会比1个开关来得复杂, 有时候会误导.
    所以postgresql数据库已经取消服务端的autocommit设定, 统一由start transaction /commit/rollback来控制事务.我想Mysql也不提倡使用这个命令.
      

  13.   

    这种全局设置,在生产环境中没有多大意义。
    一般都是在应用程序框架(如连接池的库)中设置autocommit是否为ON/OFF, 说白了,就是得到数据库连接以后,显示的调用一次set autocommit on/off (or  =1 / =0)