MySQL入門之事務概念

mysql默認是自動提交的,也就是你提交一個query,它就直接執(zhí)行!我們可以通過?
set autocommit=0 禁止自動提交?
set autocommit=1開啟自動提交?
mysql中innodb引擎才支持事務處理,默認是自動提交的;?
另外一種常用的myisam引擎是不支持事務的,本身就沒有事務的概念 .

可類比Oracle事務的概念?。?!

能夠避免MySQL的自動提交,自己封裝API以后實現(xiàn)回滾等操作!??!

#include?<stdio.h>  #include?<stdlib.h>  #include?<string.h>  #include?<dlfcn.h>  #include?<mysql>  #include?<stdio.h>  #include?<stdlib.h>  #include?<unistd.h>  #include?<string.h>  #include?<errno.h>  #include?<termios.h>  #include?<mysql>  /*  MySQL?set?autocommit?=?0或1分別什么啊,哪個是自動提交啊  要熟練使用mysql的幫助文檔,在里面查找autocommit,就會有相應的注釋,比我在這里直接給你說要深刻得多。  autocoomit是事務,根據(jù)mysql的文檔如果等于1是立即提交。但在transction中只有遇到commit或rollback才提交。希望對你有用。  */  /*  MYSQL默認是自動提交的,也就是你提交一個QUERY,它就直接執(zhí)行!我們可以通過  ?????set?autocommit=0??禁止自動提交  ?????set?autocommit=1?開啟自動提交?  mysql中INNODB引擎才支持事務處理,默認是自動提交的;  另外一種常用的MYISAM引擎是不支持事務的,本身就沒有事務的概念?  */  #define?BEGIN_TRAN??????"START?TRANSACTION"  #define?SET_TRAN????????????"SET?AUTOCOMMIT=0"??  #define?UNSET_TRAN??????"SET?AUTOCOMMIT=1"  #define?COMMIT_TRAN?????"COMMIT"  #define?ROLLBACK_TRAN???"ROLLBACK"  int?mysql_BeginTran(MYSQL?*mysql)  {  ????int?ret?=?0;  ????//--執(zhí)行事務開始SQL  ????ret?=?mysql_query(mysql,?BEGIN_TRAN);  ????if?(ret?!=?0)  ????{  ????????printf("func?mysql_query()?err:?%dn",?ret);  ????????return?ret;  ????}  ????//--設置事務手動提交  ????ret?=?mysql_query(mysql,?SET_TRAN);  ????if?(ret?!=?0)  ????{  ????????printf("func?mysql_query()?err:?%dn",?ret);  ????????return?ret;  ????}  ????return?ret;  }  int?mysql_Rollback(MYSQL?*mysql)  {  ????int?ret?=?0;  ????//--事務回滾操作  ????ret?=?mysql_query(mysql,?ROLLBACK_TRAN);  ????if?(ret?!=?0)  ????{  ????????printf("func?mysql_query()?err:?%dn",?ret);  ????????return?ret;  ????}  ????//--恢復事務自動提交標志  ????ret?=?mysql_query(mysql,?UNSET_TRAN);  ????if?(ret?!=?0)  ????{  ????????printf("func?mysql_query()?err:?%dn",?ret);  ????????return?ret;  ????}  ????return?ret;  }  int?mysql_Commit(MYSQL?*mysql)  {  ????int?ret?=?0;  ????//--執(zhí)行事務提交SQL  ????ret?=?mysql_query(mysql,?COMMIT_TRAN);  ????if?(ret?!=?0)  ????{  ????????printf("func?mysql_query()?err:?%dn",?ret);  ????????return?ret;  ????}  ????//--恢復自動提交設置  ????ret?=?mysql_query(mysql,?UNSET_TRAN);  ????if?(ret?!=?0)  ????{  ????????printf("func?mysql_query()?err:?%dn",?ret);  ????????return?ret;  ????}  ????return?ret;  }  //?建表?create?table?test_table(col1?int,?col2?varchar(10),?col3?varchar(10));?  #define?sql01?"INSERT?INTO?test_table(col1,col2,col3)?VALUES(10,?'10',?'1')"  #define?sql02?"INSERT?INTO?test_table(col1,col2,col3)?VALUES(20,?'20',?'2')"  #define?sql03?"INSERT?INTO?test_table(col1,col2,col3)?VALUES(30,?'30',?'3')"  #define?sql04?"INSERT?INTO?test_table(col1,col2,col3)?VALUES(40,?'40',?'4')"  int?main()  {  ????int?????????ret?=?NULL;  ????MYSQL???????*mysql;  ????MYSQL_RES???*res;  ????MYSQL_ROW???row;  ????char????????*query;  ????mysql?=?mysql_init(NULL);  ????mysql?=mysql_real_connect(mysql,?"localhost",?"root",?"123456",?"mydb2",?0,?NULL,?0?);  ????if?(mysql?==?NULL)  ????{  ????????ret?=?mysql_errno(mysql);  ????????printf("func?mysql_real_connect()?errn");  ????????return?ret;  ????}  ????else  ????{  ????????printf("?ok......n");  ????}  ????ret?=?mysql_BeginTran(mysql);  ????if?(ret?!=?0)  ????{  ????????printf("mysql_BeginTran()?err:%dn",?ret);  ????????return?ret;  ????}  ????ret?=?mysql_query(mysql,?sql01);  ????if?(ret?!=?0)  ????{  ????????printf("mysql_query()?err:%dn",?ret);  ????????return?ret;  ????}  ????ret?=?mysql_query(mysql,?sql02);  ????if?(ret?!=?0)  ????{  ????????printf("mysql_query()?err:%dn",?ret);  ????????return?ret;  ????}  ????ret?=?mysql_Commit(mysql);  ????if?(ret?!=?0)  ????{  ????????printf("mysql_Commit()?err:%dn",?ret);  ????????return?ret;  ????}  ????ret?=?mysql_BeginTran(mysql);  ????if?(ret?!=?0)  ????{  ????????printf("mysql_BeginTran()?err:%dn",?ret);  ????????return?ret;  ????}  ????ret?=?mysql_query(mysql,?sql03);  ????if?(ret?!=?0)  ????{  ????????printf("mysql_query()?err:%dn",?ret);  ????????return?ret;  ????}  ????ret?=?mysql_query(mysql,?sql04);  ????if?(ret?!=?0)  ????{  ????????printf("mysql_query()?err:%dn",?ret);  ????????return?ret;  ????}  ????ret?=?mysql_Rollback(mysql);  ????if?(ret?!=?0)  ????{  ????????printf("mysql_Rollback()?err:%dn",?ret);  ????????return?ret;  ????}  ????mysql_close(mysql);  }</mysql></termios.h></errno.h></string.h></unistd.h></stdlib.h></stdio.h></mysql></dlfcn.h></string.h></stdlib.h></stdio.h>

以上就是MySQL入門之事務概念的內(nèi)容,更多相關內(nèi)容請關注PHP中文網(wǎng)(www.php.cn)!

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享