溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

從舉例開啟mysql編程入門之路

發(fā)布時間:2020-04-23 10:35:16 來源:億速云 閱讀:242 作者:三月 欄目:MySQL數(shù)據(jù)庫

下文內容主要給大家?guī)韽呐e例開啟mysql編程入門之路,所講到的知識,與書籍略有不同,都是億速云專業(yè)技術人員在與用戶接觸過程中,總結出來的,具有一定的經(jīng)驗分享價值,希望給廣大讀者帶來幫助。

先了解幾個概念:
MYSQL默認是自動提交的,也就是你提交一個QUERY,它就直接執(zhí)行!我們可以通過
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默認是自動提交的 (每執(zhí)行一個sql語言都給你自動提交)
/*
MySQL set autocommit = 0或1分別什么啊,哪個是自動提交啊
要熟練使用mysql的幫助文檔,在里面查找autocommit,就會有相應的注釋,比我在這里直接給你說要深刻得多。

autocoomit是事務,根據(jù)mysql的文檔如果等于1是立即提交。但在transction中只有遇到commit或rollback才提交。希望對你有用。

從舉例開啟mysql編程入門之路

*/
#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: %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;

//--執(zhí)行事務提交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編程入門之路,如果大家還有更多需要了解的可以持續(xù)關注我們億速云的行業(yè)推新,如需獲取專業(yè)解答,可在官網(wǎng)聯(lián)系售前售后的,希望該文章可給大家?guī)硪欢ǖ闹R更新。

 

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI