mirror of
https://github.com/yasuhirokimura/db18
synced 2026-06-08 18:29:23 +00:00
77 lines
2.0 KiB
C
77 lines
2.0 KiB
C
/*-
|
|
* Copyright (c) 1997, 2019 Oracle and/or its affiliates. All rights reserved.
|
|
*
|
|
* See the file EXAMPLES-LICENSE for license information.
|
|
*
|
|
*/
|
|
|
|
#include "ex_sql_utils.h"
|
|
|
|
/*
|
|
* Transactions define boundaries around a group of SQL commands such that
|
|
* they either all successfully execute together or not at all.
|
|
*
|
|
* SQLite automatically runs each command in its own transaction, and if the
|
|
* command does not fail, its changes are automatically committed. This mode
|
|
* of operation (implicit transactions) is referred to as autocommit mode.
|
|
*
|
|
* This example shows how to use explicit transaction to appoint transaction
|
|
* scopes. It can reduces transaction number(compare with autocommit mode)
|
|
* and improve system efficiency.
|
|
*
|
|
* Example1: Commit a transaction explicitly.
|
|
* Example2: Rollback a transaction explicitly.
|
|
*
|
|
* Transactions created using BEGIN...COMMIT do not nest. For nested
|
|
* transactions, use the SAVEPOINT and RELEASE commands.
|
|
*
|
|
*/
|
|
|
|
/* Example body. */
|
|
static int
|
|
ex_sql_transaction(db)
|
|
db_handle *db;
|
|
{
|
|
const char* disp_result;
|
|
disp_result = "SELECT rank, region, name from university;";
|
|
|
|
/*
|
|
* Example1: BEGIN and COMMIT a transaction explicitly.
|
|
*/
|
|
echo_info("Example1. BEGIN and COMMIT a transaction explicitly");
|
|
exec_sql(db, "BEGIN TRANSACTION");
|
|
exec_sql(db, "DELETE FROM university WHERE region = 'Asia';");
|
|
exec_sql(db, "COMMIT TRANSACTION");
|
|
exec_sql(db, disp_result);
|
|
|
|
/*
|
|
* Example2: Rollback a transaction explicitly.
|
|
*/
|
|
echo_info("Example2. Rollback a transaction explicitly");
|
|
exec_sql(db, "BEGIN TRANSACTION");
|
|
exec_sql(db, "DELETE FROM university WHERE region = 'Europe';");
|
|
exec_sql(db, disp_result);
|
|
exec_sql(db, "ROLLBACK TRANSACTION");
|
|
exec_sql(db, disp_result);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
main()
|
|
{
|
|
db_handle *db;
|
|
|
|
/* Setup environment and preload data. */
|
|
db = setup("./ex_sql_transaction.db");
|
|
load_table_from_file(db, university_sample_data, 1/* Silent */);
|
|
|
|
/* Run example. */
|
|
ex_sql_transaction(db);
|
|
|
|
/* End. */
|
|
cleanup(db);
|
|
return 0;
|
|
}
|
|
|