c++ sqlite3如何利用事務(wù)(BEGIN;COMMIT;)批量操作
sqlite3如何利用事務(wù)(BEGIN;COMMIT;)批量操作
如果要進(jìn)行大量的操作,比如要插入10000條數(shù)據(jù),如果逐條執(zhí)行SQL語句,則消耗的時間非常長。
采用事務(wù)的方式批量處理,可以極大程度提升操作速度(我用1000條記錄實(shí)驗(yàn)了一下,速度提高了500倍以上)。
sqlite3_exec可以執(zhí)行任何sql語句,包括事務(wù)(“BEGIN TRANSACTION”)、回滾(“ROLLBACK”)和提交(“COMMIT”)等等
Eg1:
//插入條數(shù)據(jù)(在Begin和Commit之間批量操作,可以大幅度提高效率) result =sqlite3_exec(db, "BEGIN;",0, 0, 0); for (int i=0; i<10000; i++) { //插入一條數(shù)據(jù) result = sqlite3_exec(db, "INSERT INTOMyTable (MyText, MyDate, MyTime, MyFloat) VALUES ('---上班好遠(yuǎn)!', '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 是一款輕量級的數(shù)據(jù)庫,它的設(shè)計目標(biāo)是嵌入式的,但它也可以在大型系統(tǒng)中使用。SQLite 提供了一系列的命令來幫助用戶進(jìn)行數(shù)據(jù)庫操作。
以下是 SQLite 的一些常用指令:
建立數(shù)據(jù)表
使用 CREATE TABLE
命令來創(chuàng)建一個新的數(shù)據(jù)表。
CREATE TABLE table_name(field1 type1, field2 type2, ...);
例如,創(chuàng)建一個包含學(xué)號和姓名的學(xué)生信息表:
CREATE TABLE student_info(stu_no INTEGER PRIMARY KEY, name TEXT);
添加數(shù)據(jù)記錄
使用 INSERT INTO
命令向數(shù)據(jù)表中插入新的記錄。
INSERT INTO table_name(field1, field2, ...) VALUES(val1, val2, ...);
例如,向?qū)W生信息表中添加一條新的記錄:
INSERT INTO student_info(stu_no, name) VALUES(0001, 'Alex');
修改數(shù)據(jù)記錄
使用 UPDATE
命令來修改數(shù)據(jù)表中的記錄。
UPDATE table_name SET field1=val1, field2=val2 WHERE expression;
例如,修改學(xué)生信息表中學(xué)號為 0001 的記錄:
UPDATE student_info SET stu_no=0001, name='Hence' WHERE stu_no=0001;
刪除數(shù)據(jù)記錄
使用 DELETE FROM
命令來刪除數(shù)據(jù)表中的記錄。
DELETE FROM table_name WHERE expression;
例如,刪除學(xué)生信息表中學(xué)號為 0001 的記錄:
DELETE FROM student_info WHERE stu_no=0001;
查詢數(shù)據(jù)記錄
使用 SELECT
命令來查詢數(shù)據(jù)表中的記錄。
SELECT columns FROM table_name WHERE expression;
例如,查詢學(xué)生信息表中所有的記錄:
SELECT * FROM student_info;
建立索引
使用 CREATE INDEX
命令來為數(shù)據(jù)表中的字段創(chuàng)建索引。
CREATE INDEX index_name ON table_name(field);
例如,為學(xué)生信息表中的 stu_no 字段創(chuàng)建一個索引:
CREATE INDEX student_index ON student_info(stu_no);
刪除數(shù)據(jù)表或索引
使用 DROP TABLE
或 DROP INDEX
命令來刪除數(shù)據(jù)表或索引。
DROP TABLE table_name; DROP INDEX index_name;
以上就是 SQLite 的一些常用指令,通過這些指令,你可以進(jìn)行數(shù)據(jù)表的創(chuàng)建、記錄的添加、修改、刪除,以及索引的創(chuàng)建和刪除等操作。
當(dāng)然,除了上述的基本指令,SQLite 還有許多其他的指令和功能可以幫助你更好地管理和操作你的數(shù)據(jù)庫。以下是一些額外的 SQLite 指令:
ALTER TABLE
ALTER TABLE
命令用于修改現(xiàn)有的數(shù)據(jù)庫表。
你可以使用它來添加、修改或刪除表中的列,或者改變表的名稱。
ALTER TABLE table_name ADD COLUMN column_name column_type; ALTER TABLE table_name RENAME TO new_table_name;
JOIN
JOIN
命令用于將兩個或更多的表通過相互關(guān)聯(lián)的列連接起來。
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
命令的結(jié)果。它類似于 WHERE
命令,但是用于聚合函數(shù)。
SELECT column1, COUNT(column2) FROM table_name GROUP BY column1 HAVING COUNT(column2) > value;
TRANSACTION
SQLite 支持事務(wù)處理,這是一種將多個 SQL 操作組合成一個單一的原子操作的方法。
你可以使用 BEGIN TRANSACTION
,COMMIT
和 ROLLBACK
命令來控制事務(wù)。
BEGIN TRANSACTION; INSERT INTO table_name VALUES (...); UPDATE table_name SET ...; COMMIT;
PRAGMA
PRAGMA
命令用于獲取或設(shè)置 SQLite 數(shù)據(jù)庫的內(nèi)部參數(shù)。
例如,你可以使用 PRAGMA
命令來獲取數(shù)據(jù)庫的版本信息,或者設(shè)置數(shù)據(jù)庫的同步模式。
PRAGMA user_version; PRAGMA synchronous = OFF;
以上就是一些 SQLite 的高級指令,通過這些指令,你可以更好地管理和操作你的 SQLite 數(shù)據(jù)庫。
總結(jié)
好了,這些僅為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Visual Studio Code (vscode) 配置C、C++環(huán)境/編寫運(yùn)行C、C++的教程詳解(主要Windo
這篇文章主要介紹了Visual Studio Code (vscode) 配置C、C++環(huán)境/編寫運(yùn)行C、C++(主要Windows、簡要Linux),本文通過實(shí)例截圖給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03C++詳細(xì)講解繼承與虛繼承實(shí)現(xiàn)
這篇文章主要介紹了Java中的繼承詳情,繼承是面向?qū)ο笕筇卣髦?,可以使得子類具有父類的屬性和方法,還可以在子類中重新定義,以及追加屬性和方法,下文介紹需要的朋友可以參考下2022-04-04