c++ sqlite3如何利用事务(BEGIN;COMMIT;)批量操作
作者:TheLightOfStars
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 TABLE
或 DROP 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 TRANSACTION
,COMMIT
和 ROLLBACK
命令来控制事务。
BEGIN TRANSACTION; INSERT INTO table_name VALUES (...); UPDATE table_name SET ...; COMMIT;
PRAGMA
PRAGMA
命令用于获取或设置 SQLite 数据库的内部参数。
例如,你可以使用 PRAGMA
命令来获取数据库的版本信息,或者设置数据库的同步模式。
PRAGMA user_version; PRAGMA synchronous = OFF;
以上就是一些 SQLite 的高级指令,通过这些指令,你可以更好地管理和操作你的 SQLite 数据库。
总结
好了,这些仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。