下文內容主要給大家帶來從舉例開啟MySQL編程入門之路,所講到的知識,與書籍略有不同,都是創新互聯專業技術人員在與用戶接觸過程中,總結出來的,具有一定的經驗分享價值,希望給廣大讀者帶來幫助。
創新互聯-專業網站定制、快速模板網站建設、高性價比萍鄉網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式萍鄉網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋萍鄉地區。費用合理售后完善,10年實體公司更值得信賴。
先了解幾個概念:
MYSQL默認是自動提交的,也就是你提交一個QUERY,它就直接執行!我們可以通過
set autocommit=0 禁止自動提交
set autocommit=1 開啟自動提交
mysql中INNODB引擎才支持事務處理,默認是自動提交的;
另外一種常用的MYISAM引擎是不支持事務的,本身就沒有事務的概念
從代碼中來看:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dlfcn.h>
#include <mysql/mysql.h>
#include <unistd.h>
#include <errno.h>
//oracle的事務:事務起始標志 DML語言 (oracle默認事務似是打開的)
//MYSQL默認是自動提交的 (每執行一個sql語言都給你自動提交)
/*
MySQL set autocommit = 0或1分別什么啊,哪個是自動提交啊
要熟練使用mysql的幫助文檔,在里面查找autocommit,就會有相應的注釋,比我在這里直接給你說要深刻得多。
autocoomit是事務,根據mysql的文檔如果等于1是立即提交。但在transction中只有遇到commit或rollback才提交。希望對你有用。
*/
#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;
//--執行事務開始SQL
ret = mysql_query(mysql, BEGIN_TRAN);
if (ret != 0)
{
printf("func mysql_query() err: %d\n", ret);
return ret;
}
//--設置事務手動提交
ret = mysql_query(mysql, SET_TRAN);
if (ret != 0)
{
printf("func mysql_query() err: %d\n", 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: %d\n", ret);
return ret;
}
//--恢復事務自動提交標志
ret = mysql_query(mysql, UNSET_TRAN);
if (ret != 0)
{
printf("func mysql_query() err: %d\n", ret);
return ret;
}
return ret;
}
int mysql_Commit(MYSQL *mysql)
{
int ret = 0;
//--執行事務提交SQL
ret = mysql_query(mysql, COMMIT_TRAN);
if (ret != 0)
{
printf("func mysql_query() err: %d\n", ret);
return ret;
}
//--恢復自動提交設置
ret = mysql_query(mysql, UNSET_TRAN);
if (ret != 0)
{
printf("func mysql_query() err: %d\n", ret);
return ret;
}
return ret;
}
// drop table test_table
// 建表 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() err\n");
return ret;
}
else
{
printf(" ok......\n");
}
ret = mysql_BeginTran(mysql); //修改事務的屬性,變成不自動 提交
if (ret != 0)
{
printf("mysql_BeginTran() err:%d\n", ret);
return ret;
}
ret = mysql_query(mysql, sql01);
if (ret != 0)
{
printf("mysql_query() err:%d\n", ret);
return ret;
}
ret = mysql_query(mysql, sql02);
if (ret != 0)
{
printf("mysql_query() err:%d\n", ret);
return ret;
}
ret = mysql_Commit(mysql); //提交事務,恢復事務的默認屬性
if (ret != 0)
{
printf("mysql_Commit() err:%d\n", ret);
return ret;
}
ret = mysql_BeginTran(mysql);
if (ret != 0)
{
printf("mysql_BeginTran() err:%d\n", ret);
return ret;
}
ret = mysql_query(mysql, sql03);
if (ret != 0)
{
printf("mysql_query() err:%d\n", ret);
return ret;
}
ret = mysql_query(mysql, sql04);
if (ret != 0)
{
printf("mysql_query() err:%d\n", ret);
return ret;
}
ret = mysql_Rollback(mysql);
if (ret != 0)
{
printf("mysql_Rollback() err:%d\n", ret);
return ret;
}
mysql_close(mysql);
}
結果顯然sql1 sql2 commit 生效
sql3 sql4 rollback回滾無效
對于以上關于從舉例開啟mysql編程入門之路,如果大家還有更多需要了解的可以持續關注我們創新互聯的行業推新,如需獲取專業解答,可在官網聯系售前售后的,希望該文章可給大家帶來一定的知識更新。
本文題目:從舉例開啟mysql編程入門之路
當前URL:http://vcdvsql.cn/article14/pdeege.html
成都網站建設公司_創新互聯,為您提供虛擬主機、品牌網站建設、品牌網站制作、網站設計、電子商務、網站維護
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯