1
0

C++使用MySQL事务

2026-06-03

1、被调用方法Mysql相关功能:

#include "mysql_server.h"
using namespace std;

// 连接数据库
void MySQLServer::Init_sql()
{
    //初始化数据库连接池
    m_connPool = connection_pool::GetInstance();
    m_connPool->init("localhost", m_user, m_passWord, m_databaseName, 3306, m_sql_num, 0);
    //先从连接池中取一个连接
    MYSQL *mysqll = NULL;
    connectionRAII mysqlcon(&mysqll, m_connPool);
    transaction_sql = mysqll;
}

// 开始事务
bool MySQLServer::beginTransaction() {
    if (mysql_query(transaction_sql, "START TRANSACTION") != 0) {
        std::cerr << "Failed to start transaction: " << mysql_error(transaction_sql) << std::endl;
        return false;
    }
    return true;
}

// 提交事务
bool MySQLServer::commitTransaction() {
    if (mysql_query(transaction_sql, "COMMIT") != 0) {
        std::cerr << "Failed to commit transaction: " << mysql_error(transaction_sql) << std::endl;
        return false;
    }
    return true;
}

// 回滚事务
bool MySQLServer::rollbackTransaction() {
    if (mysql_query(transaction_sql, "ROLLBACK") != 0) {
        std::cerr << "Failed to rollback transaction: " << mysql_error(transaction_sql) << std::endl;
        return false;
    }
    return true;
}

// 禁用自动提交模式
bool MySQLServer::disableAutoCommit() {
    if (mysql_autocommit(transaction_sql, 0) != 0) {
        std::cerr << "Failed to disable autocommit: " << mysql_error(transaction_sql) << std::endl;
        return false;
    }
    return true;
}

// 启用自动提交模式
bool MySQLServer::enableAutoCommit() {
    if (mysql_autocommit(transaction_sql, 1) != 0) {
        std::cerr << "Failed to enable autocommit: " << mysql_error(transaction_sql) << std::endl;
        return false;
    }
        return true;
}

2、主代码

try{
    // 开启事务
    mysql_server.beginTransaction();

		// 多个sql语句执行
    // 新增stream_bind_model关联1
    if(!mysql_server.insert_stream_bind_model1(stream_id, insert_bind_model_id)){
        throw std::runtime_error("setbindAlgorithm: Failed to insert_stream_bind_model1");
    }
    // 新增stream_bind_model关联2
    if(!mysql_server.insert_stream_bind_model2(stream_id, insert_bind_model_id)){
        throw std::runtime_error("setbindAlgorithm: Failed to insert_stream_bind_model2");
    }

    mysql_server.commitTransaction();
} catch (const std::exception& ex) {
    // 如果任意更新操作失败,回滚事务
    mysql_server.rollbackTransaction();
    cout<<"setbindAlgorithm:"<< std::string(ex.what())<<endl;
}