有这么一种情况,就是1. select .. from .. where..
来查询一个人是否存在2. insert .. 
如果此人存在,那么就插入到另一个表中。
但是由于并发,导致session 2在session 1进行完第一步的时候,将此人删除了。
此时session 1还不知道,造成了session 1执行成功,插入了一条无效的数据(因为此人在session 2已经被删除了)这种情况如何做呢?

解决方案 »

  1.   

    SESSION1, SESSION2 执行的语句都是什么?举例说明。
      

  2.   

    这是 同步 的问题了,在一个 session 获取或修改表的数据前, 先对该表加锁.
    楼主可以好好看一下 "lock table" 方面的资料.
      

  3.   


    到底是设置成串行化好呢?还是LOCK TABLES好呢?
      

  4.   

    照楼主的意思是这样的吧insert into tb2 select * from tb1 where userid=100;这样的情况下,执行的过程中会给TB1加表锁,其他连接是不能够进行DELETE的。
      

  5.   

    如果是MyISAM引擎,只能lock tables
    如果是InnoDB引擎,可以通过设置隔离级来做。