Maison >base de données >tutoriel mysql >Concepts de transaction pour démarrer avec MySQL

Concepts de transaction pour démarrer avec MySQL

黄舟
黄舟original
2017-01-19 15:40:031178parcourir

MYSQL soumet automatiquement par défaut, c'est-à-dire que si vous soumettez une REQUÊTE, elle sera exécutée directement ! Nous pouvons désactiver la soumission automatique en
set autocommit=0
set autocommit=1 pour activer la soumission automatique
Seul le moteur INNODB de MySQL prend en charge le traitement des transactions, et la valeur par défaut est la soumission automatique
Un autre couramment utilisé ; MYISAM Le moteur ne supporte pas les transactions et n'a aucune notion de transactions

Il peut être comparé au concept de transactions Oracle ! ! !

Vous pouvez éviter la soumission automatique de MySQL et encapsuler vous-même l'API pour implémenter la restauration et d'autres opérations ! ! !

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dlfcn.h>
#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <termios.h>
#include <mysql/mysql.h>
/*
MySQL set autocommit = 0或1分别什么啊,哪个是自动提交啊
要熟练使用mysql的帮助文档,在里面查找autocommit,就会有相应的注释,比我在这里直接给你说要深刻得多。
autocoomit是事务,根据mysql的文档如果等于1是立即提交。但在transction中只有遇到commit或rollback才提交。希望对你有用。
*/
/*
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
     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;
    //--执行事务开始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;
}
// 建表 create table test_table(col1 int, col2 varchar(10), col3 varchar(10)); 
#define sql01 "INSERT INTO test_table(col1,col2,col3) VALUES(10, &#39;10&#39;, &#39;1&#39;)"
#define sql02 "INSERT INTO test_table(col1,col2,col3) VALUES(20, &#39;20&#39;, &#39;2&#39;)"
#define sql03 "INSERT INTO test_table(col1,col2,col3) VALUES(30, &#39;30&#39;, &#39;3&#39;)"
#define sql04 "INSERT INTO test_table(col1,col2,col3) VALUES(40, &#39;40&#39;, &#39;4&#39;)"
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);
}

Ce qui précède est le contenu des concepts de transaction pour démarrer avec MySQL. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn