以下是一个C++ MySQL事务的例子:
#include <iostream>
#include <mysql.h>
using namespace std;
int main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
conn = mysql_init(NULL);
if (conn == NULL) {
cout << "Error: can't create MySQL connection" << endl;
return 1;
}
if (!mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0)) {
cout << "Error: can't connect to database" << endl;
mysql_close(conn);
return 1;
}
// start transaction
if (mysql_autocommit(conn, false)) {
cout << "Error: can't start transaction" << endl;
mysql_close(conn);
return 1;
}
int id = 1; // example id to update
// update example row in table
if (mysql_query(conn, "UPDATE example_table SET column1 = 'new_value' WHERE id = '" + to_string(id) + "'")) {
cout << "Error: can't update table" << endl;
mysql_rollback(conn); // rollback transaction
mysql_close(conn);
return 1;
}
// select updated row
if (mysql_query(conn, "SELECT * FROM example_table WHERE id = '" + to_string(id) + "'")) {
cout << "Error: can't select from table" << endl;
mysql_rollback(conn); // rollback transaction
mysql_close(conn);
return 1;
}
res = mysql_store_result(conn);
if (res == NULL) {
cout << "Error: can't store result" << endl;
mysql_rollback(conn); // rollback transaction
mysql_close(conn);
return 1;
}
row = mysql_fetch_row(res);
if (row == NULL) {
cout << "Error: can't fetch row" << endl;
mysql_rollback(conn); // rollback transaction
mysql_close(conn);
return 1;
}
// check if update was successful
if (string(row[1]) != "new_value") {
cout << "Error: update was not successful" << endl;
mysql_rollback(conn); // rollback transaction
mysql_close(conn);
return 1;
}
// commit transaction
if (mysql_commit(conn)) {
cout << "Error: can't commit transaction" << endl;
mysql_rollback(conn); // rollback transaction
mysql_close(conn);
return 1;
}
mysql_free_result(res);
mysql_close(conn);
return 0;
}
该程序连接到MySQL数据库,启动一个事务,更新一个示例表中的一行,然后选择该行并检查是否成功更新。如果任何步骤失败,则会回滚事务。如果所有步骤都成功,则提交事务。