c++ mysql事務提交及回滾
阿新 • • 發佈:2019-01-05
之前在做有關資料庫的操作時發現,有些內容應該作為一個事務一起提交,而不是每個都單獨提交,這就需要把這些操作當做一個事務來處理。而我之前寫過簡單的資料庫的操作,因為mysql預設的是自動提交,我們就需要用到api——mysql_commit()。
mysql_commit(MYSQL* mysql, my_bool mode);
mode為1時表示ON,mode為0時表示OFF。
在關掉自動提交後,以後我們的操作就需要自己手動提交了,而這就是我們所需要的了,對於一系列的操作,如果都成功了,那我們就把他們提交上去,如果失敗了就執行回滾,這裡需要用到另外兩個api:
mysql_commit()
提 交事務。
回 滾事務。
示例程式碼:
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
void myDB::test()
{
int i = 0;
std::string sql_1 = "insert into user(id,username,password,level) values ( 1,'username ','psd', 1 );" ;
std::string sql_2 = "insert into user(id,username,password,level) values ( 1,'username ','psd','1');" ;
//
std::string sql_2 = "update user set id = 4 where id =5;";
int ON = 1;
int OFF = 0;
mysql_autocommit(connection,OFF);
mysql_autocommit(connection,OFF);
if (mysql_query(connection,sql_1.c_str()))
{
std::cout << "sql_1 was error" << std::endl;
i = 1;
}
if (mysql_query(connection,sql_2.c_str()))
{
std::cout << "sql_2 was error" << std::endl;
i = 1;
}
if (i == 1)
{
mysql_rollback(connection);
}
else
{
mysql_commit(connection);
}
mysql_autocommit(connection,ON);
}
|
這個程式碼可以直接用在之前的那篇linux下C++訪問mysql資料庫(2)裡的,因為我之前設定id為主鍵,不能重複,所以最後的結果就是sql_2執行錯誤,之前的操作全部回滾。
我自己做了一些測試,目前還沒有發現什麼問題。