<?php@mysql_connect ( "localhost", "root", "root" ) or //选择数据库之前需要先连接数据库服务器 
die ( "数据库服务器连接失败" );
@mysql_select_db ( "test" ) or //选择数据库mydb 
die ( "数据库不存在或不可用" );
mysql_query("BEGIN");//开始一个事务 
mysql_query("SET AUTOCOMMIT=0"); //设置事务不自动commit $insert="INSERT INTO test_user(uname,uphone,uaddr) VALUES ('aa1','1','aaa')"; 
mysql_query($insert); 
 
//mysql_query("COMMIT");//非autocommit模式,必须手动执行COMMIT使操作生效 
   
$insert="INSERT INTO test_user(uname,uphone,uaddr,) VALUES ('aa4','1','aaa')"; mysql_query($insert);  mysql_query("ROLLBACK");//非autocommit模式,执行ROLLBACK使事务操作无效 ?>上面的程序中有两条insert,第二条执行会失败,因为字段中多了个逗号。 
我设置的mysql_query("SET AUTOCOMMIT=0"); 为什么第一条insert仍然会插入到mysql数据库中呢?

解决方案 »

  1.   

    query('SET AUTOCOMMIT=0');
    query('START TRANSACTION');
      

  2.   

    <?php@mysql_connect ( "localhost", "root", "root" ) or //选择数据库之前需要先连接数据库服务器 
    die ( "数据库服务器连接失败" );
    @mysql_select_db ( "test" ) or //选择数据库mydb 
    die ( "数据库不存在或不可用" );
    mysql_query("BEGIN");//开始一个事务 
    mysql_query("SET AUTOCOMMIT=0"); //设置事务不自动commit $insert="INSERT INTO test_user(uname,uphone,uaddr) VALUES ('aa1','1','aaa')"; 
    if(!mysql_query($insert)){
    echo mysql_error();
    mysql_query("ROLLBACK");
    exit;
    }
      
    $insert="INSERT INTO test_user(uname,uphone,uaddr,) VALUES ('aa4','1','aaa')"; 
    if(!mysql_query($insert)){
    echo mysql_error();
    mysql_query("ROLLBACK");
    exit;
    }//mysql_query("ROLLBACK");//非autocommit模式,执行ROLLBACK使事务操作无效 ?>
      

  3.   


    数据表引擎。InnoDb支持事务处理,myisam不支持事务处理。默认情况是myisam引擎。
      

  4.   


    这样也没用啊,第一条还是会成功插入的。 我的意思是第二条失败,未commit;为什么第一条会成功插入???
      

  5.   

    哦,估计是这个原因。 请问怎么查看或设置啊?
    网上看了也是说MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!
      

  6.   

    create table ty (a varchar(10)) type=innodb;
    create table ty2 (a varchar(10)) engine=myisam;
    SHOW CREATE TABLE tablename;