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