我在上一篇文章中换句话问过这个问题,但没有得到具体答案。所以我重新表述一下。以下代码中的回滚不起作用。你能告诉我出了什么问题吗:
//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();
}
最佳答案
我的猜测是您正在使用 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
关于mysql_rollback() 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6592975/