SQLite教程(五):数据库和事务

一、Attach数据库:

ATTACH DATABASE语句添加另外一个数据库文件到当前的连接中,如果文件名为":memory:",我们可以将其视为内存数据库,内存数据库无法持久化到磁盘文件上。如果操作Attached数据库中的表,则需要在表名前加数据库名,如dbname.table_name。最后需要说明的是,如果一个事务包含多个Attached数据库操作,那么该事务仍然是原子的。见如下示例:
 

代码如下:

sqlite> CREATE TABLE testtable (first_col integer);
    sqlite> INSERT INTO testtable VALUES(1);
    sqlite> .backup 'D:/mydb.db'   --将当前连接中的主数据库备份到指定文件。
    sqlite> .exit
    --重新登录sqlite命令行工具:
    sqlite> CREATE TABLE testtable (first_col integer);
    sqlite> INSERT INTO testtable VALUES(2);
    sqlite> INSERT INTO testtable VALUES(1);
    sqlite> ATTACH DATABASE 'D:/mydb.db' AS mydb;   
    sqlite> .header on            --查询结果将字段名作为标题输出。
    sqlite> .mode column        --将每列都分开显示。
    sqlite> SELECT t1.first_col FROM testtable t1, mydb.testtable t2 WHERE t.first_col = t2.first_col;
    first_col
    ----------
    1

二、Detach数据库:
    
    卸载将当前连接中的指定数据库,注意main和temp数据库无法被卸载。见如下示例:
 

代码如下:

--该示例承载上面示例的结果,即mydb数据库已经被Attach到当前的连接中。
    sqlite> DETACH DATABASE mydb;
    sqlite> SELECT t1.first_col FROM testtable t1, mydb.testtable t2 WHERE t.first_col = t2.first_col;
    Error: no such table: mydb.testtable

三、事务:

在SQLite中,如果没有为当前的SQL命令(SELECT除外)显示的指定事务,那么SQLite会自动为该操作添加一个隐式的事务,以保证该操作的原子性和一致性。当然,SQLite也支持显示的事务,其语法与大多数关系型数据库相比基本相同。见如下示例:
 

代码如下:

sqlite> BEGIN TRANSACTION;
    sqlite> INSERT INTO testtable VALUES(1);
    sqlite> INSERT INTO testtable VALUES(2);
    sqlite> COMMIT TRANSACTION;      --显示事务被提交,数据表中的数据也发生了变化。
    sqlite> SELECT COUNT(*) FROM testtable;
    COUNT(*)
    ----------
    2
    sqlite> BEGIN TRANSACTION;
    sqlite> INSERT INTO testtable VALUES(1);
    sqlite> ROLLBACK TRANSACTION;  --显示事务被回滚,数据表中的数据没有发生变化。
    sqlite> SELECT COUNT(*) FROM testtable;
    COUNT(*)
    ----------
    2

(0)

相关推荐

  • SQLite教程(二):C/C++接口简介

    一.概述: 在SQLite提供的C/C++接口中,其中5个APIs属于核心接口.在这篇博客中我们将主要介绍它们的用法,以及它们所涉及到的核心SQLite对象,如database_connection和prepared_statement.相比于其它数据库引擎提供的APIs,如OCI.MySQL API等,SQLite提供的接口还是非常易于理解和掌握的.     二.核心对象和接口: 1. 核心对象:     在SQLite中最主要的两个对象是,database_connection和prepar

  • SQLite教程(五):索引和数据分析/清理

    一.创建索引: 在SQLite中,创建索引的SQL语法和其他大多数关系型数据库基本相同,因为这里也仅仅是给出示例用法:   复制代码 代码如下: sqlite> CREATE TABLE testtable (first_col integer,second_col integer);     --创建最简单的索引,该索引基于某个表的一个字段.     sqlite> CREATE INDEX testtable_idx ON testtable(first_col);     --创建联合索

  • SQLite教程(一):SQLite数据库介绍

    一.简介: SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB.MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征,如标准SQL语法.事务.数据表和索引等.事实上,尽管SQLite拥有诸多关系型数据库的基本特征,然而由于应用场景的不同,它们之间并没有更多的可比性.下面我们将列举一下SQLite的主要特征: 1). 管理简单,甚至可以认为无需管理.     2). 操作方便,SQLite生成的数据库文件可以在各个

  • SQLite教程(四):内置函数

    一.聚合函数: SQLite中支持的聚合函数在很多其他的关系型数据库中也同样支持,因此我们这里将只是给出每个聚集函数的简要说明,而不在给出更多的示例了.这里还需要进一步说明的是,对于所有聚合函数而言,distinct关键字可以作为函数参数字段的前置属性,以便在进行计算时忽略到所有重复的字段值,如count(distinct x). 函数 说明 avg(x) 该函数返回在同一组内参数字段的平均值.对于不能转换为数字值的String和BLOB类型的字段值,如'HELLO',SQLite会将其视为0.

  • SQLite教程(三):数据表和视图简介

    一.创建数据表: 该命令的语法规则和使用方式与大多数关系型数据库基本相同,因此我们还是以示例的方式来演示SQLite中创建表的各种规则.但是对于一些SQLite特有的规则,我们会给予额外的说明.注:以下所有示例均是在sqlite自带命令行工具中完成的. 1). 最简单的数据表:   复制代码 代码如下: sqlite> CREATE TABLE testtable (first_col integer); 这里需要说明的是,对于自定义数据表表名,如testtable,不能以sqlite_开头,因

  • SQLite教程(五):数据库和事务

    一.Attach数据库: ATTACH DATABASE语句添加另外一个数据库文件到当前的连接中,如果文件名为":memory:",我们可以将其视为内存数据库,内存数据库无法持久化到磁盘文件上.如果操作Attached数据库中的表,则需要在表名前加数据库名,如dbname.table_name.最后需要说明的是,如果一个事务包含多个Attached数据库操作,那么该事务仍然是原子的.见如下示例:   复制代码 代码如下: sqlite> CREATE TABLE testtabl

  • SQLite教程(十):内存数据库和临时数据库

    一.内存数据库: 在SQLite中,数据库通常是存储在磁盘文件中的.然而在有些情况下,我们可以让数据库始终驻留在内存中.最常用的一种方式是在调用sqlite3_open()的时候,数据库文件名参数传递":memory:",如:   复制代码 代码如下: rc = sqlite3_open(":memory:", &db); 在调用完以上函数后,不会有任何磁盘文件被生成,取而代之的是,一个新的数据库在纯内存中被成功创建了.由于没有持久化,该数据库在当前数据库连

  • SQLite教程(十二):锁和并发控制详解

    一.概述: 在SQLite中,锁和并发控制机制都是由pager_module模块负责处理的,如ACID(Atomic, Consistent, Isolated, and Durable).在含有数据修改的事务中,该模块将确保或者所有的数据修改全部提交,或者全部回滚.与此同时,该模块还提供了一些磁盘文件的内存Cache功能.     事实上,pager_module模块并不关心数据库存储的细节,如B-Tree.编码方式.索引等,它只是将其视为由统一大小(通常为1024字节)的数据块构成的单一文件

  • Android数据库中事务操作方法之银行转账示例

    本文实例讲述了Android数据库中事务操作方法之银行转账功能.分享给大家供大家参考,具体如下: 主java package com.itheima.transtation; import com.itheima.transtation.db.BankOpenHelper; import android.os.Bundle; import android.app.Activity; import android.database.sqlite.SQLiteDatabase; import and

  • SQLite教程(七):数据类型详解

    一.存储种类和数据类型: SQLite将数据值的存储划分为以下几种存储类型:   复制代码 代码如下: NULL: 表示该值为NULL值.      INTEGER: 无符号整型值.      REAL: 浮点值.      TEXT: 文本字符串,存储使用的编码方式为UTF-8.UTF-16BE.UTF-16LE.      BLOB: 存储Blob数据,该类型数据和输入数据完全相同. 由于SQLite采用的是动态数据类型,而其他传统的关系型数据库使用的是静态数据类型,即字段可以存储的数据类型

  • Python操作SQLite/MySQL/LMDB数据库的方法

    1.概述 1.1前言 最近在存储字模图像集的时候,需要学习LMDB,趁此机会复习了SQLite和MySQL的使用,一起整理在此. 1.2环境 使用win7,Python 3.5.2. 2.SQLite 2.1准备 SQLite是一种嵌入式数据库,它的数据库就是一个文件.Python 2.5x以上版本内置了SQLite3,使用时直接import sqlite3即可. 2.2操作流程 概括地讲,操作SQLite的流程是: ·通过sqlite3.open()创建与数据库文件的连接对象connectio

  • SQLite教程(十一):临时文件

    一.简介: 尽管SQLite的数据库是由单一文件构成,然而事实上在SQLite运行时却存在着一些隐含的临时文件,这些临时文件是出于不同的目的而存在的,对于开发者而言,它们是透明的,因此在开发的过程中我们并不需要关注它们的存在.尽管如此,如果能对这些临时文件的产生机制和应用场景有着很好的理解,那么对我们今后应用程序的优化和维护都是极有帮助的.在SQLite中主要产生以下七种临时文件,如: 1). 回滚日志.     2). 主数据库日志.     3). SQL语句日志.     4). 临时数据

  • MyBatis学习教程(五)-实现关联表查询方法详解

    一.一对一关联  1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR() ); CREATE TABLE class( c_id INT PRIMARY KEY AUTO_INCREMENT, c_name VAR

  • MySQL系列教程小白数据库基础

    目录 1.基础概念与基础命令 1)基础概念 2)基础命令 2.SQL语句的书写顺序和执行顺序 1)一个完整SQL查询语句的书写顺序 2)一个完整的SQL语句执行顺序 3)关于select和having执行顺序谁前谁后的说明 这里介绍的MySQL相关知识,并不是针对那些想学习DBA的同学,而是针对那些想转行.从事数据分析行业的同学. 下面这些知识点,是我学习MySQL数据库时,觉得有必要掌握的一些知识点. 1.基础概念与基础命令 1)基础概念 ① 数据库 按照一定数据结构,存储和管理数据的仓库.

随机推荐