1. 程式人生 > >c++ mysql事務提交及回滾

c++ mysql事務提交及回滾

之前在做有關資料庫的操作時發現,有些內容應該作為一個事務一起提交,而不是每個都單獨提交,這就需要把這些操作當做一個事務來處理。而我之前寫過簡單的資料庫的操作,因為mysql預設的是自動提交,我們就需要用到api——mysql_commit()。

    mysql_commit(MYSQL* mysql, my_bool mode);

    mode為1時表示ON,mode為0時表示OFF。

    在關掉自動提交後,以後我們的操作就需要自己手動提交了,而這就是我們所需要的了,對於一系列的操作,如果都成功了,那我們就把他們提交上去,如果失敗了就執行回滾,這裡需要用到另外兩個api:

mysql_commit()
提 交事務。

mysql_rollback() 

回 滾事務。

示例程式碼:

?
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執行錯誤,之前的操作全部回滾。

    我自己做了一些測試,目前還沒有發現什麼問題。