【1】手動提交事務
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlRecord>QSqlDatabase db;
db.transaction();
for(int i=0; i<100000; ++i){QSqlQuery cmd(QString("UPDATE %1 SET %2=%3 WHERE id==%4").arg(tableName ).arg(content).arg(str).arg(i));cmd.exec();
}
db.commit();
【2】事務的回滾
當數據插入失敗后,可以執行事務的回滾操作,需要在commit之前進行回滾
db.rollback();
【3】鎖的機制
1)鎖的分類
一類是回滾日志鎖,一類是WAL模式下的鎖
2)鎖狀態主要有以下五種:
UNLOCKED:初始狀態,表示沒有鎖。
SHARED:允許其他共享鎖存在,但不允許排他鎖。
?RESERVED:表示事務已經開始,但尚未進行任何修改。
PENDING:表示正在等待獲取排他鎖。
?EXCLUSIVE:表示事務正在進行寫入操作,其他事務無法讀取或寫入。
3)狀態轉換
讀:從UNLOCKED到SHARED,提交后回到UNLOCKED
寫:從UNLOCKED到RESERVED,然后到EXCLUSIVE,提交后回到UNLOCKED或RESERVED