表的myisam变成innodb,如何去掉以前的自动commit功能,让程序员手动写程序commit呢?我找了配置文件my.cnf,没有看到类似的参数设置,大家知道的,告诉下。

解决方案 »

  1.   

    为什么不让程序员自己在执行之前用:start transaction/begin/set autocommit=0
    ·         init_connect服务器为每个连接的客户端执行的字符串。字符串由一个或多个SQL语句组成。要想指定多个语句,用分号间隔开。例如,每个客户端开始时默认启用autocommit模式。没有全局服务器变量可以规定autocommit默认情况下应禁用,但可以用init_connect来获得相同的效果:SET GLOBAL init_connect='SET AUTOCOMMIT=0';
    还可以在命令行或选项文件中设置该变量。要想使用选项文件设置变量,应包括下述行:[mysqld]
    init_connect='SET AUTOCOMMIT=0'
      

  2.   

    这个根本不可能,MYISAM存储引擎并不支持事务,也自然没有什么COMMIT和ROLLBACK。所做的修改立即生效。
      

  3.   

    不存在什么以前的自动commit功能。 AUTO-COMMIT是MYSQL服务器的SESSION设定,与以前不以前没什么关系。你可以在SESSION中设置autocommit 变量为0或者FALSE以中止自动提交。
      

  4.   

    drop table if exists dms.t1 ;
    create table dms.t1 (c1 int)
    engine=innodb;
    insert into dms.t1 select 1;
    select * from dms.t1;
    rollback;
    select * from dms.t1;我做这个测试的时候,为什么rollback后面 还可以查到dms.t1还有1条数据呢,我都rollback了啊!
      

  5.   

    查看你的autocommit是什么值
    select @@autocommit
    是1的话 表示已经提交了.所以rollback 无效;
    是0的话 表示还没有提交,可以rollback
      

  6.   

    这个AUTOCOMMIT是一个SESSION级的变量,自然无法在MY.CNF参数文件中设置。不过你可以通过如下方式实现相同功能
    [mysqld]
    init_connect='SET autocommit=0'
      

  7.   

    init_connect这个设置对普通用户有效,对超级用户root无效。所以,还是有缺点的。有人甚至还为此报过bug, 
    详见:
    http://bugs.mysql.com/bug.php?id=5035
    对于普通用户来说,最实用的是:
    init_connect='SET AUTOCOMMIT=0;set names gbk'