需要是这样,有几个数据,a、b、c,需要把数据a插入到表1,然后取到表1自动生成的id,与b一起插入到表2;然后id与c一起插入到表3。
我分三个语句写入,出现一个问题,有时候第一个mysql执行了,但是第二个没有执行成功,这样就导致数据的缺失,所以想,是不是可以把这三个语句合成一句,然后一起提交,成功就一起成功,失败就一起失败如果可以的话,这个语句怎么写呢?

解决方案 »

  1.   

    1、用存储过程,里边加上事务,这三个操作在一个事务中,成功都成功,失败都失败。
    2、用last_insert_id 获取插入到表中生成的自增id ,作为数据插入下一个表,
      

  2.   

    没验证DROP PROCEDURE IF EXISTS  test_sp1  
    CREATE PROCEDURE test_sp1(IN str_a varchar(100), IN str_b varchar(100), IN str_c varchar(100))  
    BEGIN  
    DECLARE t_error INTEGER DEFAULT 0;  
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;   START TRANSACTION;  
    INSERT INTO test1 VALUES(str_a);
    SET Result_ID=LAST_INSERT_ID();
    INSERT INTO test2 VALUES(str_b, Result_ID);
    INSERT INTO test3 VALUES(str_c, Result_ID); IF t_error = 1 THEN  
    ROLLBACK;
    ELSE
    COMMIT;
    END IF;END;CALL test_sp1('aa', 'bb', 'cc');
      

  3.   

    首先你看下自己数据库的表要是
    ENGINE=InnoDB
    InnoDB才支持事务。然后你百度php事务~