標籤:
之前在做有關資料庫的操作時發現,有些內容應該作為一個事務一起提交,而不是每個都單獨提交,這就需要把這些操作當做一個事務來處理。而我之前寫過簡單的資料庫的操作,因為mysql預設的是自動認可,我們就需要用到api——mysql_commit()。
mysql_commit(MYSQL* mysql, my_bool mode);
mode為1時表示ON,mode為0時表示OFF。
在關掉自動認可後,以後我們的操作就需要自己手動提交了,而這就是我們所需要的了,對於一系列的操作,如果都成功了,那我們就把他們提交上去,如果失敗了就執行復原,這裡需要用到另外兩個api:
mysql_commit()
提 交事務。
mysql_rollback()
回 滾事務。
範例程式碼:
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執行錯誤,之前的操作全部復原。
我自己做了一些測試,目前還沒有發現什麼問題。
c++ mysql事務提交及復原