UP | HOME

SQLite 简介

Table of Contents

SQLite,是一款轻型的数据库,是遵守ACID的关系数据库管理系统

SQLite 是 D.RichardHipp 用C语言编写的开源嵌入式数据库引擎

它是完全独立的,不具有外部依赖性

它是作PHPV4.3中的一个选项引入的,构建在PHPV5中

SQLite支持多数SQL92标准,可以在所有主要的操作系统上运行,并且支持大多数计算机语言

SQLite 对 SQL92 标准的支持包括 索引 、 限制 、 触发 和 查看 。SQLite 不支持外键限制,但支持 原子的 、 一致的 、 独立的 和 持久的 ACID 事务。区别于其他数据库引擎:

  1. SQLite引擎不是一个独立的进程,而是根据应用程序要求进行动态或静态连接到程序中成为它的一个主要部分
  2. SQLite直接访问其存储文件。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中

它包含在一个简洁的C库中。它的设计目标是 嵌入式 的,而且目前已经在很多嵌入式产品中使用了它

SQLite第一个Alpha版本诞生于2000年5月

至今已经有14个年头,SQLite也迎来了一个版本 SQLite 3已经发布

特性

SQLite的特性主要有:

  1. ACID事务
  2. 零配置:无需安装和管理配置
  3. 支持大多数SQL92标准

    比如:ATTACH DATABASE,BEGIN TRANSACTION,COMMENT等等,同时它还支持事务处理功能
    
  4. 单个数据库的所有信息储存在单一磁盘文件中

    适用于作为应用程序文件的存储格式
    
  5. 支持数据库大小扩展至2TB
  6. 源码代码量小, 大致13万行C代码, 4.43M
  7. 简单易用的API
  8. 用ANSI-C编写,同时加入TCL绑定。可通过Wrapper支持其他语言的绑定
  9. 良好注释的源代码, 并且有着90%以上的测试覆盖率
  10. 可作为单独头文件包,编译简单,易于添加到大型项目中
  11. 独立: 没有额外依赖。
  12. 支持多平台多开发语言: UNIX(Linux, Mac OS-X, Android, IOS), Windows(Win32, WinCE, WinRT), C, PHP, Perl, Java, C#,Python, Ruby
  13. 源码完全的开源, 你可以用于任何用途, 包括出售它
  14. 命令行接口,可通过命令行来管理数据库

推荐使用SQLite的场景

  1. 作为应用程序文件格式

    相对于使用fopen()以XML,JSON,CSV或者其他序列化方法将应用程序数据写入到磁盘
    
    使用SQLite数据库来保存数据不仅可以避免写入过程中的解析器故障,而且数据将具有良好的跨平台性
    
    另一方面,对数据库的事务特点可以保证数据更新的一致性
    
  2. 作为小程序的数据库

    SQLite具有较小的代码量,拥有较好的内存和磁盘管理机制,而且不需要维护,可靠
    
    因此适合作为手机,PDA,MP3播放器等设备的数据库引擎
    
  3. 作为网页站点的数据库

    由于网站通常需要将一些无配置信息存放在磁盘上, SQLite适合于作为中小型站点的数据库
    
  4. 作为企业数据库管理系统

快速上手

这里简要介绍了SQLite的使用方法

建立一个新的数据库

在shell或者DOS命令行下输入:

$ sqlite3 test.db 

这将建立一个新的名为 test.db 的数据库文件.(可以使用不同的数据库名),在命令行提示符中输入SQL命令创建并分配数据库空间

更多相关内容请参考接下来的内容

编写一个使用SQLite的示例程序

以下是一个演示如何使用 SQLite 的 TCL接口的TCL程序.该程序通过执行SQL语句建立一个由两个参数定义的数据库:

  1. 首先程序定位并执行第7行sqlite3命令打开并创建一个db对象
  2. 通过eval方法将SQL语句绑定到db对象并执行
  3. 最后关闭数据库连接

    #!/usr/bin/tclsh
    if {$argc!=2} {
        puts stderr "Usage: %s DATABASE SQL-STATEMENT"
        exit 1
    }
    
    package require sqlite3
    
    sqlite3 db [lindex $argv 0]
    
    db eval [lindex $argv 1] x {
        foreach v $x(*) {
            puts "$v = $x($v)"
        }
        puts ""
    }
    
    db close
    

下面是一个演示如何使用SQLite C/C++接口的C程序

  • 第一个参数表示数据库的名称
  • 第二个参数表示需要执行的SQL语句
#include "sqlite.h"
#include <stdio.h>

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
  int i;
  for(i=0; i<argc; i++){
    printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
  }
  printf("\n");
  return 0;
}

int main(int argc, char **argv){
  sqlite3 *db;
  char *zErrMsg = 0;
  int rc;

  if(argc != 3){
    fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
    return(1);
  }
  rc = sqlite3_open(argv[1], &db);
  if( rc ){
    fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
    sqlite3_close(db);
    return(1);
  }
  rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
  if( rc!=SQLITE_OK ){
    fprintf(stderr, "SQL error: %s\n", zErrMsg);
    sqlite3_free(zErrMsg);
  }
  sqlite3_close(db);
  return 0;
}
Next: 架构 Home: SQLite 源码分析