数据库事务,为了保证一系列操作都进行,或者都不进行,一般用于大批量处理数据,以防程序因为中途崩溃而产生bug。
【举个简单的例子,图书馆借书流程:
1、学生借书,刷条形码以及学生卡;
2、系统显示该书库存少一件;
3、系统记录借书人的id和姓名。】
如果系统进行到第二步完成后突然炸了,那么岂不是该书显示被借走了,库存少了,但却没有借书人的信息。为了避免这种问题,引入数据库事务。
这里做一个简单的qt使用事务的例子,供自己今后查阅。
QString createTable;
QSqlQuery query;
//判断是否支持事务操作,支持便启动事务
if(QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions))
{
if(QSqlDatabase::database().transaction())
{
//在数据库中建立车道、通道、相位、计划、日期、路口图的表
createTable = QString("create table if not exists lane(data text not null);");
query.exec(createTable);
createTable = QString("create table if not exists passway(data text not null);");
query.exec(createTable);
createTable = QString("create table if not exists phase(data text not null);");
query.exec(createTable);
createTable = QString("create table if not exists plan(data text not null);");
query.exec(createTable);
createTable = QString("create table if not exists date(data text not null);");
query.exec(createTable);
createTable = QString("create table if not exists crossingPic(data text not null);");
query.exec(createTable);
//如果提交事务失败
if(!QSqlDatabase::database().commit())
{
qDebug()<< QSqlDatabase::database().lastError();
//如果回滚失败
if(!QSqlDatabase::database().rollback())
qDebug()<< QSqlDatabase::database().lastError();
}
}
}