大家说说看是怎么处理的。
比如主表为A 外表为B,
在进行A表操作的时候 同时要对B表操作。
因为表引擎是myisam 所以不能用到事务,那么假如我在对A操作成功后,执行B操作失败,导致状态不一致。
如果有个操作只需要用到A表信息,如果我不进行连接操作,只对A表进行select,这时候有可能就会得到那些没用的垃圾数据。
可能给实际的应用带来很大问题。
一些开源系统是采用表连接查询保证数据正确。
大家还有其他的方法吗?

解决方案 »

  1.   

    你要A与B数据影响一致。只取A时。得判断B啊。那不就得关联或单独查询了。或A加标识字段B是否成功。只取A判断。
      

  2.   

    关联查询是因为“需要 B 表的数据”,或者是“只需要 A 中符合特定条件的数据”,而不是为了“排除 A 里面的垃圾数据”。既然楼主的业务需求需要事务,那就想办法开事务吧。换表引擎也不是太难的事情,别想着用头疼医脚的办法。
    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
      

  3.   

    使用myisam 有 它的好处。能用事务就用了。有时候不想用关联,是为了效率的考虑- -
      

  4.   

    又想保持数据一致,还不想使用事务处理?
    使用isam的好处在于它的查询效率高。但也不见得使用innodb效率就一定很低。表关联查询是为了查询a和b同时执行成功的数据,这个不是解决方案,而是弥补之前更新插入错误的一种方式。试想,如果不用事务处理。那么:
    1.A执行更新,成功,b执行更新,失败,那么a就要回归到之前的数据状态。这就需要记录之前a的数据。2.A执行插入,成功,b执行插入或者更新,失败,那么就要删除之前的a插入的数据。然后要重复上述过程,直到A与b同时执行成功。