在一个数据库连接上所得到的结果集,如果需要多线程分别从这个结果集中读取记录,那么需不需要在应用程序中考虑多线程的同步?
另外,如果在上面的问题中取得结果集用的是 mysql_use_result 而不是 mysql_fetch_result,那么在另外一个数据库连接中能不能对相应的数据库表进行 增删查改 的操作呢?

解决方案 »

  1.   

    在一个数据库连接上所得到的结果集,如果需要多线程分别从这个结果集中读取记录,那么需不需要在应用程序中考虑多线程的同步?
    要看你的具体应用。你可以在MYSQL上设置事务的隔离级别。另外,如果在上面的问题中取得结果集用的是 mysql_use_result 而不是 mysql_fetch_result,那么在另外一个数据库连接中能不能对相应的数据库表进行 增删查改 的操作呢?
    看你的具体操作代码,如果使用了锁或者事务,则会受影响。 如果都只是简单的 select 则没有问题。
      

  2.   

    LS能不能再说得详细一些,我还是不太明白。    “具体的应用”怎么理解呢?我的程序就是多线程在同一连接上的结果集中读取数据,然后对记录进行处理。另外,其他的应用程序可能随时会需要更新这张数据库表,但那些程序不是我负责的。
        简单来说,也就是我的应用程序只读取数据,但别人的应用程序会更新数据库表。不同的应用程序是在不同的数据库连接上来操作的。
        在这样的情况下,我是否需要考虑线程同步,使用mysql_use_result与mysql_fetch_result 又有什么本质的不同?
      

  3.   


    首先,你的mysql最好要用到支持事务处理的引擎,比如InnoDB引擎。
    另外,根据你的需求,你的读数据操作大概不想读取到脏数据,可以设置事务隔离级为读已提交或者可重复读,那么,就不需要在你的程序里进行加锁了。
    你的程序里最好是每个线程单独一个连接。
      

  4.   


    在程序中,一方面从数据库取出的数据字节数是很大的,涉及到BLOB字段(因此我才考虑使用mysql_use_result);另一方面,需要对数据进行打包传送,就会涉及到数据格式化问题,也是比较费时的操作。
    我的想法是在同一个连接上启用多个线程,可以提高数据处理的效率。LS建议每个线程单一个连接,能不能再说得更详细一些呢?