假设有a.php,内容是用ajax每1毫秒请求c.php;c.php是更新test表,并且有事务保护:
a.php
<script>
function prod_price()
{
$.post("c.php",{},function(msg){
$('#msg').append("<p>"+msg.info+"</p>")
},"json")
}
setInterval("prod_price()",1);
</script>
<div id=msg></div>c.php
mysql_query('START TRANSACTION') or exit("{data:'',status:2,info:'事务错误1'}");
mysql_query("update test set name='1111111'");
if(mysql_errno ())
{
mysql_query('rollback');
mysql_query('END');
exit("{data:'',status:2,info:'事务错误2'}");
}
else
{
mysql_query('commit');
mysql_query('END');
exit("{data:'',status:1,info:'ok'}");
}
为了测试并发引起的事务错误,我又复制a.php 到b.php;内容完全一样;然后我用ie开了a。php;firefox开了b.php,运行都正常,返回都是ok;这就奇怪了,每个1毫秒运行一次,2个进程共享一个资源test表,都是更新,咋就不报错呢?????

解决方案 »

  1.   

    第一:确保c.php不缓存,这个firebug
    第二:可以住数据库中插不同数据,或递增数据
      

  2.   

    确保c.php不缓存,这个firebug;请问如何在firebug中设置啊?
      

  3.   

    我试过了,把b.php 的mysql_query("update test set name='1111111'"); 
    改为:mysql_query("insert into test (name) values ('".time().mt_rand()."')");还是不报错,数据库正常入库。
      

  4.   

    试过了,还是一样。
    几秒钟的时间,test表里面记录新增了1700多条,但就是没有报事务错误,奇怪。
      

  5.   

    b.php
    修改为:
    mysql_query('START TRANSACTION') or exit("{data:'',status:2,info:'事务错误1'}");mysql_query("insert into test (name) values ('".time().mt_rand()."')");
    mysql_query("insert into test (name) values ('".(555+time().mt_rand())."')");
    mysql_query("insert into test (name) values ('".(666+time().mt_rand())."')");
    if(mysql_errno ())
    {
    mysql_query('rollback');
    mysql_query('END');
    exit("{data:'',status:2,info:'事务错误2'}");
    }
    else
    {
    mysql_query('commit');
    mysql_query('END');
    exit("{data:'',status:1,info:'ok'}");
    }
    没有用
      

  6.   

    补充一个说明test表类型为InnoDB问题,没有解决,等待中。
      

  7.   

    mysql这方面做的不好,我也试来的确不行
      

  8.   

    不是吧,mysql自称支持事务处理并发,咋会是这样了,
    我的mysql版本是5.0.45-community-nt
      

  9.   

    楼主还是不要用mysql自带的事物功能吧,现在还不怎么成熟,还是自己像个类似的方法吧,如先将数据写入到文件中,等执行完一个数据段的时候在向数据库中插入数据
      

  10.   

    偶,好的,
    让我think think.
      

  11.   

    我think出来了,
    mysql 不是不行,而是太厉害了,超过oracle,mssql,别人都能提示错误,
    mysql 已经到了不提示的境界,全部交给他处理,平滑过渡,是不是这么回事?歇个菜,给分了,我准备换数据库了!