事务中1062错误。如何恢复?经过了整整一天的DEBUG.我发现一个问题start transaction;之后,后续SQL,如果insert into失败,1062。那么这个事物就没有rollback,也没有commit请问这种情况如何处理????

解决方案 »

  1.   

    ·         错误:1062 SQLSTATE: 23000 (ER_DUP_ENTRY) 消息:键%d的重复条目'%s'。重复建错误之后,前面的都插入进去成功,在commit提交前要是有1条出现冲突,会回滚到插入之前,
    楼主的恢复是什么意思
    要想跳过这个错误的话,可以把sql改成
    把sql改成INSERT IGNORE INTO或则replace into不知道符合楼主的意思不。 
      

  2.   

    用这个代替你的insert
    INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; 
      

  3.   

    sql语句是什么?用REPLACE INTO试试
      

  4.   

    我想说的就是这个意思,在commit前出现了1062即冲突,他没有回滚。
    或者说这个事务没有结束。
    譬如我有一个存储过程AAA,代码如下start transaction;insert into ...       // 在这行出现了1062commit;我发现出现1062之后,这个事务没有结束,且没有提交。你能明白我的意思吗?就是事务还在继续,如果我执行两条SQL语句:
    CALL AAA();
    update ...那么后续这个update执行成功了,但是在数据库中看不到。
    因为当前事务还没有结束。必须要再执行一个COMMIT;
    即:CALL AAA();  // 如果他的insert into 出现了1062
    update ...   // 那么这个还属于上述的存储过程
    COMMIT;      // 必须要手动才能提交。大家没遇到过吗?我亲自测试了,确实如此啊。!!!!!
      

  5.   


    你这个在国外论坛有用,CSDN搜索功能太弱。
    最早还有在小版块搜索,现在一搜索连分词都整不好,无关帖子一大堆。
      

  6.   

    我就是想insert,不想insert or update
      

  7.   

    试试:加入
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION rollback
     
      

  8.   


    你这个可能可以,因为文档中也有类似的东西。但是我想确定MySQL中的存储过程就是这样的吗?因为我是一个MySQL新手。
      

  9.   


    有相关的文档推荐吗?说句实话MySQL的随机文档(我看的还是中文文档)确实不怎么友好。
      

  10.   

    他这个还有什么 FOR SQLSTATE = 2300023000是什么都不清楚,大概就是某种类型错误码估计。
      

  11.   


    http://dev.mysql.com/doc/refman/5.1/zh/stored-procedures.html#conditions-and-handlers
    官方说明