#include <iostream> #include <exception> #include <vector> #include <unistd.h> #include <mysqlx/xdevapi.h> #define D_USER "root" #define D_PWD "mysql" #define D_HOST "localhost" #define D_PORT 33060 #define D_DB "D_COMPANY" using std::cout; using std::endl; int main(void) try { //建立會話 mysqlx::Session sess( mysqlx::SessionOption::USER, D_USER, mysqlx::SessionOption::PWD, D_PWD, mysqlx::SessionOption::HOST, D_HOST, mysqlx::SessionOption::PORT, D_PORT, mysqlx::SessionOption::DB, D_DB, mysqlx::SessionOption::SSL_MODE, mysqlx::SSLMode::DISABLED ); //打開事務,以後的DDL或DML操做都要手動提交或回滾 cout << ">> turn on transaction." << endl; sess.startTransaction(); //存儲保存點 std::vector<std::string> savepoints; cout << ">> insert into t_dept." << endl; savepoints.emplace_back(sess.setSavepoint()); //設置保存點 mysqlx::SqlStatement stmt = sess.sql("INSERT INTO T_DEPT VALUES(?, ?, ?)"); stmt.bind(40, "OPERATIONS", "BOSTON"); stmt.execute(); cout << ">> insert into t_dept." << endl; savepoints.emplace_back(sess.setSavepoint()); stmt = sess.sql("INSERT INTO T_DEPT VALUES(?, ?, ?)"); stmt.bind(50, "ENGINEER", "BeiJing"); stmt.execute(); cout << ">> delete from t_dept." << endl; savepoints.emplace_back(sess.setSavepoint()); mysqlx::SqlResult rset = sess.sql("DELETE FROM T_DEPT WHERE DEPTNO=40").execute(); for(std::string str : savepoints) { cout << str << endl; } sess.rollbackTo(savepoints.at(2)); //回滾到指定保存點 sess.commit(); //提到事務 sess.close(); //關閉會話 cout << "Done!" << endl; } catch (mysqlx::Error &err) { cout << "ERROR : " << err << endl; return -1; }