多线程同时对table1进行插入操作,某一时刻同时对表中没有的项x进行写操作,它们同时请求锁table1
线程1锁住了插入了x,线程2在线程1释放后也锁住table1 插入x;
问题:如何让他们不要插入重复项?

解决方案 »

  1.   

    插入前应该判断一下表中是否存在X1)锁表
    2)SELECT X
    3) INSERT
    4)解锁。
      

  2.   

    锁表->判断是否存在X->插入->释放锁
      

  3.   

    并发写操作的话,这个表要确保是innodb存储引擎的。
    写操作时可以放到事务里面,innodb的MVCC可以保证并发事务。
    如果要保证值唯一的话,可以在该字段上建立唯一索引,但是切记写操作时别使用replace,而应该使用insert。
      

  4.   

    ALTER TABLE table_name ADD UNIQUE (column_list);
                        Lockroutertable="lock table table1 write"
                        cur1.execute(Lockroutertable)
                        SELECT="select id from table where ip=%s"
                        cur1.execute(SELECT,router)
                        result=cur1.fetchone()
                        if result==None:
                            INSERT="insert table1 value ('','','')"
                        else:
                            ID=result[0]