|
- 事务和预处理语句的结合
- 通过预处理语句和事务的结合,可以确保多条 SQL 语句要么全部成功,要么全部失败。
- 示例:事务与预处理语句结合
- mysql_autocommit(conn, 0); // 关闭自动提交
- MYSQL_STMT *stmt = mysql_stmt_init(conn);
- const char *query = "INSERT INTO test (id, name) VALUES (?, ?)";
- mysql_stmt_prepare(stmt, query, strlen(query));
- MYSQL_BIND bind[2];
- int id = 1;
- char name[20] = "Alice";
- // 绑定参数
- memset(bind, 0, sizeof(bind));
- bind[0].buffer_type = MYSQL_TYPE_LONG;
- bind[0].buffer = (char *)&id;
- bind[1].buffer_type = MYSQL_TYPE_STRING;
- bind[1].buffer = name;
- bind[1].buffer_length = sizeof(name);
- mysql_stmt_bind_param(stmt, bind);
- if (mysql_stmt_execute(stmt)) {
- mysql_rollback(conn); // 执行失败,回滚
- } else {
- mysql_commit(conn); // 执行成功,提交事务
- }
- mysql_stmt_close(stmt);
- mysql_autocommit(conn, 1); // 恢复自动提交
复制代码 这是网上找的资料,预处理部分API好像没封装,意思是使用预处理语句执行的sql操作,才需要用提交事务方法,而执行SQL语句方法是立即生效的。
|
|