#include
#include
#include
#include
#include
#define D_USER"root"
#define D_PWD"mysql"
#define D_HOST"localhost"
#define D_PORT33060
#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<: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;
}