2011-07-06 5 views
-1

나는 내 마지막 게시물에서이 단어를 물어 봤지만 구체적인 대답을 얻지 못했습니다. 그래서 저는 다시 한번 말합니다. 다음 코드의 롤백이 작동하지 않습니다. 당신은 무엇이 잘못되었는지 말씀 해주십시오 수 있습니다mysql_rollback()이 작동하지 않습니다.

//Creating and populating a table 

C_P_table() 
{ 
    MYSQL *conn; 

     conn = mysql_init(NULL); 
     if (mysql_real_connect(conn, "localhost", "root", 
       "password", "testdb", 0, NULL, 0) == NULL) { 
      printf("Error2 %u: %s\n", mysql_errno(conn), mysql_error(conn)); 
      exit(1); 
     } 


     if (mysql_query(conn, "CREATE TABLE writers(name VARCHAR(25))")) { 
      printf("Error3 %u: %s\n", mysql_errno(conn), mysql_error(conn)); 

     } 
     mysql_autocommit(conn,0); 
     if (mysql_query(conn,"START TRANSACTION")) { 
       printf("Error4 %u: %s\n", mysql_errno(conn), mysql_error(conn)); 
     } 
     mysql_query(conn,"START TRANSACTION"); 
     mysql_query(conn, "INSERT INTO writers VALUES('Leo Tolstoy')"); 
     mysql_query(conn, "INSERT INTO writers VALUES('Jack London')"); 
     mysql_query(conn, "INSERT INTO writers VALUES('Honore de Balzac')"); 
     mysql_query(conn, "INSERT INTO writers VALUES('Lion Feuchtwanger')"); 
     mysql_query(conn, "INSERT INTO writers VALUES('Emile Zola')"); 

     if(!mysql_rollback(conn)) 
      printf("Roll Back successful\n"); 
// mysql_query(conn,"ROLLBACK"); //doesn't work neither 

     mysql_close(conn); 

} 

int main(int argc, char **argv) 
{ 
    C_P_table(); 
} 
+1

는 "작동하지 않습니다"당신은 컴파일러 오류를 받고있어 의미 또는 MySQL의 또는 무엇으로부터 경고를 받고있어? 아마도 그것이 작동하지 않는 이유를 생각해보십시오 - 아마도 InnoDB 트랜잭션 엔진을 사용하지 않고 MyISAM을 사용하고 있기 때문일 것입니다. –

답변

3

내 생각 엔 당신이 MyISAM 테이블, MySQL은 normaly 기본 테이블 형식을 사용하고 있다는 점이다.

그래서

if (mysql_query(conn, "CREATE TABLE writers(name VARCHAR(25)) ENGINE = INNODB")) 

에 선

if (mysql_query(conn, "CREATE TABLE writers(name VARCHAR(25))")) 

을 변경하고 일이 뭐죠 참조하십시오.

참조 : http://dev.mysql.com/doc/refman/5.0/en/storage-engines.html

관련 문제