zoukankan      html  css  js  c++  java
  • SQLITE3

    SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。

    工作原理

    不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。

    为什么要用 SQLite?

    • 不需要一个单独的服务器进程或操作的系统(无服务器的)。

    • SQLite 不需要配置,这意味着不需要安装或管理。

    • 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。

    • SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。

    • SQLite 是自给自足的,这意味着不需要任何外部的依赖。

    • SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。

    • SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。

    • SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。

    • SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。

    • 历史

      1. 2000 -- D. Richard Hipp 设计 SQLite 是为了不需要管理即可操作程序。

      2. 2000 -- 在八月,SQLite1.0 发布 GNU 数据库管理器(GNU Database Manager)。

      3. 2011 -- Hipp 宣布,向 SQLite DB 添加 UNQl 接口,开发 UNQLite(面向文档的数据库)。

        语言绑定

        可以从C/C++程序中使用这个库,还可以获得对Tcl和一些其他脚本语言的绑定。
        在CPAN的DBD::SQLite上有一个Perl的DBI/DBD模块,它不是到SQLite的接口,而是包括整个SQLite数据库引擎在其中并不需要任何额外的软件。
        还有一个Python模块叫做PySQLite。
        PHP从PHP5.0开始包含了SQLite,但是自5.1版之后开始成为一个延伸函式库。SQLite能与PHP4一起工作但不包含在其中。
        Rails2.0.3将缺省的数据库配置改为了SQLite 3。

      SQLite 局限性

      在 SQLite 中,SQL92 不支持的特性如下所示:

      特性描述
      RIGHT OUTER JOIN 只实现了 LEFT OUTER JOIN。
      FULL OUTER JOIN 只实现了 LEFT OUTER JOIN。
      ALTER TABLE 支持 RENAME TABLE 和 ALTER TABLE 的 ADD COLUMN variants 命令,不支持 DROP COLUMN、ALTER COLUMN、ADD CONSTRAINT。
      Trigger 支持 支持 FOR EACH ROW 触发器,但不支持 FOR EACH STATEMENT 触发器。
      VIEWs 在 SQLite 中,视图是只读的。您不可以在视图上执行 DELETE、INSERT 或 UPDATE 语句。
      GRANT 和 REVOKE 可以应用的唯一的访问权限是底层操作系统的正常文件访问权限。

      SQLite 命令

      与关系数据库进行交互的标准 SQLite 命令类似于 SQL。命令包括 CREATE、SELECT、INSERT、UPDATE、DELETE 和 DROP。这些命令基于它们的操作性质可分为以下几种:

      DDL - 数据定义语言

      命令描述
      CREATE 创建一个新的表,一个表的视图,或者数据库中的其他对象。
      ALTER 修改数据库中的某个已有的数据库对象,比如一个表。
      DROP 删除整个表,或者表的视图,或者数据库中的其他对象。

      DML - 数据操作语言

      命令描述
      INSERT 创建一条记录。
      UPDATE 修改记录。
      DELETE 删除记录。

      DQL - 数据查询语言

      命令描述
      SELECT 从一个或多个表中检索某些记录。
    • SQLite 安装

      SQLite 的一个重要的特性是零配置的,这意味着不需要复杂的安装或管理。本章将讲解 Windows、Linux 和 Mac OS X 上的安装设置。

      在 Windows 上安装 SQLite

      • 请访问 SQLite 下载页面,从 Windows 区下载预编译的二进制文件。

      • 您需要下载 sqlite-tools-win32-*.zip 和 sqlite-dll-win32-*.zip 压缩文件。

      • 创建文件夹 C:\sqlite,并在此文件夹下解压上面两个压缩文件,将得到 sqlite3.def、sqlite3.dll 和 sqlite3.exe 文件。

      • 添加 C:\sqlite 到 PATH 环境变量,最后在命令提示符下,使用 sqlite3 命令,将显示如下结果。

      C:\>sqlite3
      SQLite version 3.7.15.2 2013-01-09 11:53:05
      Enter ".help" for instructions
      Enter SQL statements terminated with a ";"
      sqlite>
    • SQLite 命令

       SQLite 编程人员所使用的简单却有用的命令。这些命令被称为 SQLite 的点命令,这些命令的不同之处在于它们不以分号 ; 结束。

      让我们在命令提示符下键入一个简单的 sqlite3 命令,在 SQLite 命令提示符下,您可以使用各种 SQLite 命令。

      $ sqlite3
      SQLite version 3.3.6
      Enter ".help" for instructions
      sqlite>

      如需获取可用的点命令的清单,可以在任何时候输入 ".help"。例如:

      sqlite>.help

      上面的命令会显示各种重要的 SQLite 点命令的列表,如下所示:

      命令描述
      .backup ?DB? FILE 备份 DB 数据库(默认是 "main")到 FILE 文件。
      .bail ON|OFF 发生错误后停止。默认为 OFF。
      .databases 列出数据库的名称及其所依附的文件。
      .dump ?TABLE? 以 SQL 文本格式转储数据库。如果指定了 TABLE 表,则只转储匹配 LIKE 模式的 TABLE 表。
      .echo ON|OFF 开启或关闭 echo 命令。
      .exit 退出 SQLite 提示符。
      .explain ON|OFF 开启或关闭适合于 EXPLAIN 的输出模式。如果没有带参数,则为 EXPLAIN on,及开启 EXPLAIN。
      .header(s) ON|OFF 开启或关闭头部显示。
      .help 显示消息。
      .import FILE TABLE 导入来自 FILE 文件的数据到 TABLE 表中。
      .indices ?TABLE? 显示所有索引的名称。如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表的索引。
      .load FILE ?ENTRY? 加载一个扩展库。
      .log FILE|off 开启或关闭日志。FILE 文件可以是 stderr(标准错误)/stdout(标准输出)。
      .mode MODE 设置输出模式,MODE 可以是下列之一:
      • csv 逗号分隔的值

      • column 左对齐的列

      • html HTML 的 <table> 代码

      • insert TABLE 表的 SQL 插入(insert)语句

      • line 每行一个值

      • list 由 .separator 字符串分隔的值

      • tabs 由 Tab 分隔的值

      • tcl TCL 列表元素

      .nullvalue STRING 在 NULL 值的地方输出 STRING 字符串。
      .output FILENAME 发送输出到 FILENAME 文件。
      .output stdout 发送输出到屏幕。
      .print STRING... 逐字地输出 STRING 字符串。
      .prompt MAIN CONTINUE 替换标准提示符。
      .quit 退出 SQLite 提示符。
      .read FILENAME 执行 FILENAME 文件中的 SQL。
      .schema ?TABLE? 显示 CREATE 语句。如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表。
      .separator STRING 改变输出模式和 .import 所使用的分隔符。
      .show 显示各种设置的当前值。
      .stats ON|OFF 开启或关闭统计。
      .tables ?PATTERN? 列出匹配 LIKE 模式的表的名称。
      .timeout MS 尝试打开锁定的表 MS 毫秒。
      .width NUM NUM 为 "column" 模式设置列宽度。
      .timer ON|OFF 开启或关闭 CPU 定时器。

      让我们尝试使用 .show 命令,来查看 SQLite 命令提示符的默认设置。

      sqlite>.show
           echo: off
        explain: off
        headers: off
           mode: column
      nullvalue: ""
         output: stdout
      separator: "|"
          width:
      sqlite>
      确保 sqlite> 提示符与点命令之间没有空格,否则将无法正常工作。

      格式化输出

      您可以使用下列的点命令来格式化输出为本教程下面所列出的格式:

      sqlite>.header on
      sqlite>.mode column
      sqlite>.timer on
      sqlite>

      上面设置将产生如下格式的输出:

      ID          NAME        AGE         ADDRESS     SALARY
      ----------  ----------  ----------  ----------  ----------
      1           Paul        32          California  20000.0
      2           Allen       25          Texas       15000.0
      3           Teddy       23          Norway      20000.0
      4           Mark        25          Rich-Mond   65000.0
      5           David       27          Texas       85000.0
      6           Kim         22          South-Hall  45000.0
      7           James       24          Houston     10000.0
      CPU Time: user 0.000000 sys 0.000000

      sqlite_master 表格

      主表中保存数据库表的关键信息,并把它命名为 sqlite_master。如要查看表概要,可按如下操作:

      sqlite>.schema sqlite_master

      这将产生如下结果:

      CREATE TABLE sqlite_master (
        type text,
        name text,
        tbl_name text,
        rootpage integer,
        sql text
      );
  • 相关阅读:
    【幻化万千戏红尘】qianfengDay03-java基础学习:for循环,switch,if
    Hexo | 博客文章链接优化之abbrlink
    Hexo 集成 Gitalk 评论系统
    Linux对一个目录及其子目录所有文件添加权限
    PhpStorm配置使用phpunit单元测试
    php根据当前定位经纬度排序
    mysql根据当前定位经纬度排序
    linux压缩和解压缩命令
    PHP常见数学函数及BC高精度数学函数用法示例
    vagrant package 打包自己的box镜像
  • 原文地址:https://www.cnblogs.com/johnny1024/p/8157560.html
Copyright © 2011-2022 走看看