c++ sqlite3如何利用事务(BEGIN;COMMIT;)批量操作

 更新时间:2023年08月01日 10:39:06   作者:TheLightOfStars  
这篇文章主要介绍了c++ sqlite3如何利用事务(BEGIN;COMMIT;)批量操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

sqlite3如何利用事务(BEGIN;COMMIT;)批量操作

如果要进行大量的操作,比如要插入10000条数据,如果逐条执行SQL语句,则消耗的时间非常长。

采用事务的方式批量处理,可以极大程度提升操作速度(我用1000条记录实验了一下,速度提高了500倍以上)。

sqlite3_exec可以执行任何sql语句,包括事务(“BEGIN TRANSACTION”)、回滚(“ROLLBACK”)和提交(“COMMIT”)等等

Eg1:

//插入条数据(在Begin和Commit之间批量操作,可以大幅度提高效率)
result =sqlite3_exec(db, "BEGIN;",0, 0, 0);
for (int i=0; i<10000; i++)
{
    //插入一条数据
    result = sqlite3_exec(db,
        "INSERT INTOMyTable (MyText, MyDate, MyTime, MyFloat) VALUES ('---上班好远!', '2012-03-23', '9:00:00', 1000);",
        0, 0, 0);
}
result =sqlite3_exec(db, "COMMIT;",0, 0, 0); .

Eg.2

string strSql;  
strSql+="begin;\n";  
for (int i=0;i<100;i++)  
{  
    strSql+="insert into MyTable values(null,'heh');\n";  
}  
strSql+="commit;";  
//cout<<strSql<<endl;  
nResult = sqlite3_exec(db,strSql.c_str(),NULL,NULL,&errmsg);  

sqlite3常用指令

SQLite 是一款轻量级的数据库,它的设计目标是嵌入式的,但它也可以在大型系统中使用。SQLite 提供了一系列的命令来帮助用户进行数据库操作。

以下是 SQLite 的一些常用指令:

建立数据表

使用 CREATE TABLE 命令来创建一个新的数据表。

CREATE TABLE table_name(field1 type1, field2 type2, ...);

例如,创建一个包含学号和姓名的学生信息表:

CREATE TABLE student_info(stu_no INTEGER PRIMARY KEY, name TEXT);

添加数据记录

使用 INSERT INTO 命令向数据表中插入新的记录。

INSERT INTO table_name(field1, field2, ...) VALUES(val1, val2, ...);

例如,向学生信息表中添加一条新的记录:

INSERT INTO student_info(stu_no, name) VALUES(0001, 'Alex');

修改数据记录

使用 UPDATE 命令来修改数据表中的记录。

UPDATE table_name SET field1=val1, field2=val2 WHERE expression;

例如,修改学生信息表中学号为 0001 的记录:

UPDATE student_info SET stu_no=0001, name='Hence' WHERE stu_no=0001;

删除数据记录

使用 DELETE FROM 命令来删除数据表中的记录。

DELETE FROM table_name WHERE expression;

例如,删除学生信息表中学号为 0001 的记录:

DELETE FROM student_info WHERE stu_no=0001;

查询数据记录

使用 SELECT 命令来查询数据表中的记录。

SELECT columns FROM table_name WHERE expression;

例如,查询学生信息表中所有的记录:

SELECT * FROM student_info;

建立索引

使用 CREATE INDEX 命令来为数据表中的字段创建索引。

CREATE INDEX index_name ON table_name(field);

例如,为学生信息表中的 stu_no 字段创建一个索引:

CREATE INDEX student_index ON student_info(stu_no);

删除数据表或索引

使用 DROP TABLEDROP INDEX 命令来删除数据表或索引。

DROP TABLE table_name;
DROP INDEX index_name;

以上就是 SQLite 的一些常用指令,通过这些指令,你可以进行数据表的创建、记录的添加、修改、删除,以及索引的创建和删除等操作。

当然,除了上述的基本指令,SQLite 还有许多其他的指令和功能可以帮助你更好地管理和操作你的数据库。以下是一些额外的 SQLite 指令:

ALTER TABLE

ALTER TABLE 命令用于修改现有的数据库表。

你可以使用它来添加、修改或删除表中的列,或者改变表的名称。

ALTER TABLE table_name ADD COLUMN column_name column_type;
ALTER TABLE table_name RENAME TO new_table_name;

JOIN

JOIN 命令用于将两个或更多的表通过相互关联的列连接起来。

SELECT * FROM table1 JOIN table2 ON table1.column_name = table2.column_name;

GROUP BY

GROUP BY 命令用于将选定的列中具有相同值的行组合在一起。

SELECT column1, COUNT(column2) FROM table_name GROUP BY column1;

HAVING

HAVING 命令用于过滤 GROUP BY 命令的结果。它类似于 WHERE 命令,但是用于聚合函数。

SELECT column1, COUNT(column2) FROM table_name GROUP BY column1 HAVING COUNT(column2) > value;

TRANSACTION

SQLite 支持事务处理,这是一种将多个 SQL 操作组合成一个单一的原子操作的方法。

你可以使用 BEGIN TRANSACTIONCOMMITROLLBACK 命令来控制事务。

BEGIN TRANSACTION;
INSERT INTO table_name VALUES (...);
UPDATE table_name SET ...;
COMMIT;

PRAGMA

PRAGMA 命令用于获取或设置 SQLite 数据库的内部参数。

例如,你可以使用 PRAGMA 命令来获取数据库的版本信息,或者设置数据库的同步模式。

PRAGMA user_version;
PRAGMA synchronous = OFF;

以上就是一些 SQLite 的高级指令,通过这些指令,你可以更好地管理和操作你的 SQLite 数据库。

总结

好了,这些仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C++深入讲解初始化列表的用法

    C++深入讲解初始化列表的用法

    这篇文章主要介绍了C++成员初始化列表,除了可以使用构造函数对类成员进行初始化之外,C++还提供了另外一种初始化的方法,叫做成员初始化列表。下面来看看文章的详细吧,需要的朋友可以参考一下
    2022-04-04
  • C++使用curl库进行http请求的方法详解

    C++使用curl库进行http请求的方法详解

    这篇文章主要为大家详细介绍了C++如何使用curl库进行http请求,并且实现获取返回的头信息的时间,也就是获取后台服务的当前时间,感兴趣的可以了解一下
    2023-07-07
  • C++和OpenCV实现图像字符化效果

    C++和OpenCV实现图像字符化效果

    图像字符化的意思是将图像以字符形式呈现,具有一定的娱乐价值,许多开发人员通过python实现该功能,C++实现的代码较少,因此本文通过C++和OpenCV实现,给予C++开发人员一些可供借鉴的思路,需要的朋友可以参考下
    2022-06-06
  • Matlab实现简易纪念碑谷游戏的示例代码

    Matlab实现简易纪念碑谷游戏的示例代码

    《纪念碑谷》是USTWO公司开发制作的解谜类手机游戏,在游戏中,通过探索隐藏小路、发现视力错觉以及躲避神秘的乌鸦人来帮助沉默公主艾达走出纪念碑迷阵。本文将用Matlab编写简易版的纪念碑谷游戏,感兴趣的可以了解一下
    2022-03-03
  • 关于C++中0是十进制还是八进制的问题

    关于C++中0是十进制还是八进制的问题

    本篇文章中,小编将为大家介绍关于C++中0是十进制还是八进制的问题,有需要的朋友可以参考一下
    2013-04-04
  • c++ For循环执行顺序流程图解

    c++ For循环执行顺序流程图解

    for 循环允许您编写一个执行特定次数的循环的重复控制结构,这里为大家分享一下具体的执行流程,需要的朋友可以参考下
    2021-10-10
  • C语言中杨氏矩阵与杨辉三角的实现方法

    C语言中杨氏矩阵与杨辉三角的实现方法

    这篇文章主要给大家介绍了关于C语言中杨氏矩阵与杨辉三角的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • C语言 map函数的基础用法详解

    C语言 map函数的基础用法详解

    这篇文章主要为大家介绍了C语言 map函数的基础用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • 动态数组C++实现方法(分享)

    动态数组C++实现方法(分享)

    下面小编就为大家带来一篇动态数组C++实现方法(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • C++实现本地TCP通讯的示例代码

    C++实现本地TCP通讯的示例代码

    这篇文章主要为大家详细介绍了C++如何利用TCP技术,实现本地ROS1和ROS2的通讯,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02

最新评论