//mysql中的事務
#include #include #include #include "mysql.h"
#define set_tran "set autocommit=0" //手動commit ――――手動commit
#define unset_tran "set autocommit=1" //自動commit
#define _host_ "127.0.0.1"
#define _user_ "root"
#define _passwd_ "123"
#define _dbname_ "scott"
//設定事務為手動提交
int mysql_operationtran(mysql *mysql)
//--設定事務為手動提交
ret = mysql_query(mysql, set_tran); //set autocommmit = 0
if (ret != 0)
return ret;
}//設定事務為自動提交
int mysql_autotran(mysql *mysql)
//--設定事務為自動提交
ret = mysql_query(mysql, unset_tran); //"set autocommit = 1"
if (ret != 0)
return ret;
}//執行commit,手動提交事務
int mysql_commit(mysql *mysql)
return ret;
}//執行rollback,回滾事務
int mysql_rollback(mysql *mysql)
return ret; }
#define drop_sample_table "drop table if exists test_table"
#define create_sample_table "create table test_table(col1 int,\
col2 varchar(10),\
col3 varchar(10))"
#define sql01 "insert into test_table(col1,col2,col3) values(10, 'aaa', 'a1')"
#define sql02 "insert into test_table(col1,col2,col3) values(20, 'bbb', 'b2')"
#define sql03 "insert into test_table(col1,col2,col3) values(30, 'ccc', 'c3')"
#define sql04 "insert into test_table(col1,col2,col3) values(40, 'ddd', 'd4')"
int main(void)
printf(" --- connect ok......\n");
//執行刪除表
if (mysql_query(mysql, drop_sample_table))
//執行建立表
if (mysql_query(mysql, create_sample_table))
ret = mysql_operationtran(mysql); //開啟事務,並修改事務屬性為手動commit
if (ret != 0)
ret = mysql_query(mysql, sql01); //向表中插入第一行資料 『aaa』
if (ret != 0)
ret = mysql_query(mysql, sql02); //向表中插入第二行資料 『bbb』
if (ret != 0)
ret = mysql_commit(mysql); //手動提交事務
if (ret != 0)
//aaa bbb 進去了。
#if 0
ret = mysql_autotran(mysql); // =再次= 修改事務屬性為【自動】commit
if (ret != 0)
#else
ret = mysql_operationtran(mysql); // =再次= 修改事務屬性為【手動】commit
if (ret != 0)
#endif
ret = mysql_query(mysql, sql03); //向表中插入第三行資料 『ccc』
if (ret != 0)
ret = mysql_query(mysql, sql04); //向表中插入第四行資料 『ddd』
if (ret != 0)
ret = mysql_rollback(mysql); //直接rollback操作
if (ret != 0)
//rollback操作是否能回退掉ccc、ddd的值,取決於事務屬性。
mysql_close(mysql);
return 0;
}
mysql事務分類 實現
原子性 atomicity 乙個事務中的操作要麼全成功,要麼全失敗 一致性 consistency 事務開始之前和結束之後,資料庫的完整性約束不被破壞 隔離性 isolation 每個讀寫事務的物件對其他事務的操作物件相互分離,每個事務之間完全隔離 永續性 durability 事務一旦提交,結果永...
MySQL事務實現原理
以上是sql 92標準中定義的四種隔離級別。在mysql中,預設的隔離級別是repeatable read 可重複讀 並且解決了幻讀問題。不可重複讀重點在於update和delete,而幻讀的重點在於insert insert update delete 快照讀和當前讀 鎖定讀一致性非鎖定讀假如乙個...
mysql 事務 數量 Mysql 事務
什麼是事務 不可分割的操作,比如乙個事務要修改 a 表和刪除 b 表的資料兩個操作,這兩個操作都成功,這個事務才 commit,不然 rollback 每條 sql 語句都是乙個事務 只對 dml 生效 caid 一致性 consistency 讓資料保持一定程度的合理性,比如使用者加入購物車,購物...