2011-07-06 203 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中的默认表类型。

因此改线

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

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

,看看发生了什么。

参见:http://dev.mysql.com/doc/refman/5.0/en/storage-engines.html