我在C++下面使用多线程对数据库进行大量数据的插入时,发生数据丢失的情况,C++中多线程是有锁控制的,但是MySql中就不是很清楚是如何控制的。
如何可以将MySql中的表格进行锁定呢? 比方说在一个线程在对数据库进行操作的时候,避免另一个线程的操作呢?
是使用锁定吗? 

解决方案 »

  1.   

    比方说在一个线程在对数据库进行操作的时候,避免另一个线程的操作呢? 
    -------------------------------------------------
    如果你非要这样的话,则“lock table tb_name write; unlock tables”
    这样的话,感觉你用多线程是多余了的吧?mysql内部自动有锁机制,你说的数据丢失,可能是死锁或超时引起的吧,建议你在c下抓下错误日志看看。
      

  2.   

    你可以用 lock tables mytable WRITE 来锁定表。
      

  3.   

    我查了了,最后跟到得是在mysql_real_query(m_myConnection, SQL.c_str(),SQL.length())的时候出错的,而且在执行1000次的时候就会出现5次这样的错误。错误编号:mysql_errno(m_myConnection) = 1064(存在特殊的不合法的符号),我还是断定在执行mySql的时候因为执行两条Sql语句的时候出现干扰问题造成的。应该还是因为线程锁定的问题。
      

  4.   

    检查一下你的MYSQL的错误日志和普通日志,看一下你传到MYSQL服务器端的SQL语句到底是什么。
      

  5.   

    mysql的1064的错误,那是语法的错误造成的,并不是你所说的什么锁
    你抓取下这个错误的语句看看吧
      

  6.   

    没有,我传入的全部都是一样的值,即使标号出错也是全部都错啊,但是也就是1000条相同的sql语句中出现别那么5条左右,我想会不会是因为Mysql执行的时候发生紊乱,但是我现在将每条语句执行之后sleep(1000),休眠1s之后还是出错。还是没有执行成功。why?
      

  7.   

    怀疑是你网络转输上的问题。只在检查了你的日志才能确认MYSQL服务端到底收到的是什么。
      

  8.   


    那就符合了上面所说的mysql的1064的错误,那是语法的错误造成的