InnoDB类型的表支持事务处理,好像也是要MYSQL的版高一些才行

解决方案 »

  1.   

    MyISAM、DBD、HEAP类型的表,是在MYSQL 3。X版本中的有,MyISAM是普通的表,不支持事务;HEAP是内存里的表,速度快,但关机就没了,也不安全,DBD是安全表,支持事务,但我看书上说支持的不好,但不好在哪里就不知道了。InnoDB和ISAM类型的表是在MYSQL 4。X中新添加,有什么功能就不知道了。DBD和InnoDB都支持事务处理,但哪个要好一点哪?
      

  2.   

    执行事务时,PHP的代码要怎样写呀?
      

  3.   

    php本身并不处理事务,mysql 4.0.11  以上版本用 START TRANSACTION 或 BEGIN 或 BEGIN WORK 
    START TRANSACTION;
    SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
    UPDATE table2 SET summmary=@A WHERE type=1;
    COMMIT;
      

  4.   

    那在PHP下就无法执行事务处理了吗
      

  5.   

    楼主,你没有看帖么?
    上面已经有人说了innoDB和DBD都支持事务呀!
    连代码都给出了!START TRANSACTION;
    SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
    UPDATE table2 SET summmary=@A WHERE type=1;
    COMMIT;不过,我也有一点不解.上面使用了@A变量.
    但我发现在PHP用mysql_query("START TRANSACTION;
    SELECT @A:=SUM(salary) FROM table1 WHERE type=1;")会报错!
    原因是有2个分号,那我将它分为二句mysql_query("START TRANSACTION;
    和mysql_query("SELECT @A:=SUM(salary) FROM table1 WHERE type=1;")就OK了.
    why ??还有,@A是MYSQL执行时的临时变量吧,那我如果像上面一样用几个mysql_query("")分步执行的,@A还能保存住么?
    还有,万一几个进程同时进行数据库操作,MYSQL哪知道这个@A是谁产生的呢?难道不会搞乱?
      

  6.   

    来看看这边高手的发言
    http://community.csdn.net/Expert/topic/3998/3998884.xml?temp=.5482294
      

  7.   

    对了,假如满足条件的记录不止一条,下面的语句会将它们一一对应么?则table1.keyfield关联到table2.keyfield,一条主档记录对应一条或多条明细记录.SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
    UPDATE table2 SET summmary=@A WHERE type=1;
      

  8.   

    看到一个别人的贴将数据库类型改为innoDB$sql1 = "set auto_commite=0";
    $sql2 = "begin";
    $sql3 = "update......";
    $sql4 = "update.......";
    $sql5 = "commite";
    $sql6 = "rollback";mysql_query($sql1);
    mysql_query($sql2);
    mysql_query($sql3);
    mysql_query($sql4);
    if(mysql_errno)
        mysql_query($sql5);
    else
        mysql_query($sql6);要是这样的话,是不是不能使用一个稳固的连接。比如说,几个人同时刷新,怎么知道SQL2是哪个页面发过来的。
      

  9.   

    使用
    db=mysql_connect($host,$user,$pwd)  //打开一个新连接而不是使用
    db=mysql_connectd($host,$user,$pwd)  //如果有一个连接,则使用这个连接
      

  10.   

    看看我的怪问题,在PHP和MYSQL中如何搞定它!http://community.csdn.net/Expert/topic/4014/4014752.xml?temp=.4669153
      

  11.   

    可还是有点不懂要是使用db=mysql_connect($host,$user,$pwd)来连接,速度不是要很慢.要地使用db=mysql_connectd($host,$user,$pwd),会不会出现,当两个网页同时刷新时,一个网页进行事务处理,别一个网页就是简单的更新,当事务页出错时,数据回滚会不会把简单更新的处理也给回滚了呀.MYSQL能认识是哪个网页在进行事务吗?
      

  12.   

    如果用 $db = mysql_connect($host, $user, $pwd) 来连接数据库服务器,那么不同网页(即使是一个网页多次提交)提交的连接请求都被返回一个不同的连接标识,而后的查询都是需要这个 $db 标识的(看看 PHP 语法就知道了),一旦PHP脚本程序已经执行完毕页面生成,那么这些都会被自动释放。所以不用担心 MySQL 会搞混不同地方来的查询请求。
    另外,事务回卷只是回卷该事务中涉及到的命令,不会回卷其它进程的查询。你可以自己开两个mysql窗口做试验么。
    不过有一点倒是要注意,“事务”过程中并不代表其它进程不能更新这些表了,事务并不锁定表,如果你要实现类似这样的操作,要自己在事务中通过SQL来锁定。具体的看 MySQL 参考手册中 InnoDB 章节。