简介

SQLite是一个关系数据库管理系统,包含在一个C编程库中。与许多其他数据库管理系统相比,SQLite不是客户机-服务器数据库引擎。相反,它被嵌入到最终程序中。

SQLite是acid兼容的,并且实现了大多数SQL标准,通常遵循PostgreSQL语法。然而,SQLite使用动态的弱类型SQL语法,这并不保证域的完整性。例如,这意味着可以将字符串插入定义为整数的列中。SQLite将尝试在适当的格式之间转换数据,在本例中,将字符串“123”转换为整数,但不保证这种转换,如果不能进行这种转换,则按原样存储数据。

SQLite是应用软件(如web浏览器)中用于本地/客户机存储的嵌入式数据库软件的流行选择。可以说,它是部署最广泛的数据库引擎,因为目前有许多广泛使用的浏览器、操作系统和嵌入式系统(如移动电话)都在使用它。SQLite绑定到许多编程语言。

设计

与客户机-服务器数据库管理系统不同,SQLite引擎没有应用程序与之通信的独立进程。相反,SQLite库被链接进来,从而成为应用程序不可分割的一部分。链接可以是静态的,也可以是动态的。应用程序通过简单的函数调用使用SQLite的功能,这减少了数据库访问中的延迟:单个进程中的函数调用比进程间通信更有效。

SQLite将整个数据库(定义、表、索引和数据本身)存储为主机上的一个跨平台文件。它通过在编写过程中锁定整个数据库文件来实现这种简单的设计。SQLite读操作可以是多任务的,但是写操作只能按顺序执行。

由于没有服务器的设计,SQLite应用程序比客户机-服务器数据库需要更少的配置。SQLite被称为zero-conf,因为它不需要服务管理(例如启动脚本)或基于GRANT和密码的访问控制。访问控制是通过授予数据库文件本身的文件系统权限来处理的。客户机-服务器系统中的数据库使用文件系统权限,该权限只允许守护进程访问数据库文件。

无服务器设计的另一个含义是,多个进程可能无法写入数据库文件。在基于服务器的数据库中,几个写入器都将连接到同一个守护进程,该守护进程能够在内部处理锁。另一方面,SQLite必须依赖于文件系统锁。它对同时访问数据库的其他进程的了解较少。因此,SQLite不是写密集型部署的首选。然而,对于并发性很少的简单查询,SQLite的性能得益于避免了将数据传递给另一个进程的开销。

SQLite使用PostgreSQL作为参考平台。“PostgreSQL会做什么”用来理解SQL标准。一个主要的偏差是,除了主键之外,SQLite不强制执行类型检查;值的类型是动态的,不受模式的严格限制(尽管模式在存储时将触发转换,如果这种转换可能是可逆的)。SQLite努力遵循Postel的规则。

特性

SQLite实现了SQL的大部分SQL-92标准,但是它缺少一些特性。例如,它部分地提供了触发器,并且不能写入视图(但是它提供的是提供该功能的触发器而不是触发器)。虽然它提供了复杂的查询,但它仍然具有有限的ALTER TABLE函数,因为它不能修改或删除列。

SQLite为sql兼容的DBMS使用了一种不同寻常的类型系统;与大多数SQL数据库系统中为列分配类型不同,类型被分配给各个值;在语言术语中,它是动态类型的。此外,它的弱类型与Perl相同:可以将字符串插入到整数列中(尽管SQLite将首先尝试将字符串转换为整数,如果列的首选类型是integer)。这增加了列的灵活性,特别是绑定到动态类型脚本语言时。但是,该技术不能移植到其他SQL产品。一个常见的批评是SQLite的类型系统缺乏其他产品中静态类型列提供的数据完整性机制。SQLite web站点描述了一种“严格关联”模式,但是还没有添加此功能。然而,它可以通过像CHECK(typeof(x)=‘integer’)这样的约束来实现。[13]表通常包含一个隐藏的rowid索引列,它提供更快的访问速度。如果数据库包含一个整数主键列,SQLite通常会将其作为rowid的别名进行优化,使内容存储为严格类型的64位带符号整数,并将其行为更改为类似于自动递增列。SQLite的未来版本可能包含一个命令,用于反省列是否具有与rowid类似的行为,以便将这些列与弱类型的、非自动递增的整数主键区分开来。

带有完整Unicode函数的SQLite是可选的。

多个计算机进程或线程可以同时访问同一个数据库。可以并行地满足多个读访问。只有在当前没有服务其他访问的情况下,才能满足写访问。否则,写访问将由于错误代码而失败(或者可以自动重试,直到可配置超时过期为止)。在处理临时表时,这种并发访问情况会发生变化。当在3.7版本中启用写前日志(WAL)以支持并发读写时,这个限制得到了放松

SQLite版本3.7.4首先添加了FTS4(全文搜索)模块,它在较老的FTS3模块的基础上进行了增强。 FTS4允许用户对类似于搜索引擎搜索网页的文档执行全文搜索。版本3.8.2增加了对创建没有rowid的表的支持,可以提供空间和性能改进。公共表表达式支持在3.8.3.版本中添加到SQLite

2015年,随着json1扩展和新的子类型接口,SQLite version 3.9引入了JSON内容管理。

总结

总的来说适用于桌面级本地存储,不适用于网络数据库。缺少了并发性,功能也有所阉割。

SQLite:一个轻量级数据库相关推荐

  1. mysql nosql sqlite_自己做了一个轻量级的 NoSQL 数据库

    给大家介绍一个个人作品,叫 PoloDB,一个非常轻量级的 NoSQL 数据库,有着类似 MongoDB 的 API,主打几个特性: 轻量级 没有像 MySQL 那样的独立进程,它可以编译成静态库或者 ...

  2. node sqlite 插入数据_方便且实用,Python内置的轻量级数据库实操

    之前我们在很多项目案例中都使用了MySQL数据库.有的同学问:MySQL安装和配置太麻烦了,老是搞不定,有没有更简便的方法? 当然有咯! Python内置的sqlite3模块就是一个轻量级的数据库,不 ...

  3. 轻量级数据库sqlite,spring boot+sqlite的配置详解 (一)

    spring boot+sqlite的配置,及成功运行详解 sqlite数据库的安装与调试 首先,通过sqlite官方地址下载对应的安装包 https://www.sqlite.org/downloa ...

  4. 轻量级数据库sqlite,spring boot+sqlite的配置详解 (二)

    轻量级数据库sqlite,spring boot+sqlite的配置详解 (二) 轻量级数据库sqlite,spring boot+sqlite的配置详解 (一) 首先,需要创建一个spring bo ...

  5. python access 源码_连接的微软Access数据库,这是一个轻量级的Python模块(MDB格式)...

    A lightweight python module to connect Microsoft Access Database. the module is to use ADO engine th ...

  6. 轻量级数据库sqlite的编译

    sqlite是很多客户端程序所使用的一种轻量级数据库,但是目前没有lib文件,只有源码和dll文件,我们可以利用VS工具生成lib,然后在应用程序中使用. (1)下载地址 http://www.sql ...

  7. 大数据入门(SQLite手机本地轻量级数据库增删改查)

    SQLite手机本地轻量级数据库 数据库分为: 1.关系型数据库(mysql主外键属于关系型) 2.对象型数据库(oracle) 3.嵌入式数据库 案例: 安卓控件(5个Button)访问Activi ...

  8. SQLite轻量级数据库jar包链接

    轻量级数据库-SQLite 最新版sqlite-jdbc-3.23.1.jar下载 链接:https://pan.baidu.com/s/1NjwQzx0o0LrQbAjbYt7uyA 提取码:c2z ...

  9. 【牛角书】轻量级数据库SQLite与H2比较

    对 PHP程序员来说,SQLite可以快速的搭建数据库开发环境,提供轻松.自容器.无配置.无独立服务的数据库环境,所有数据保存在一个文件里.当使用 MySQL 作为最终生产平台时,SQLite 是不可 ...

最新文章

  1. 环形链表找入口,真的太妙了
  2. 执行transact mysql_创建数据库失败((Microsoft.SqlServer.Smo))执行Transact-SQL
  3. 几个极品笑话,放松下心情
  4. 机器学习11主成分分析
  5. snapchat注册不到_从Snapchat获得开发人员职位中学到的经验教训
  6. Mapreduce的排序、全排序以及二次排序
  7. 【热烈祝贺】我刊主编郑纬民教授荣获中国存储终身成就奖!
  8. javaEE插件安装
  9. (转)Spring实现IoC的多种方式
  10. linux sh 按键精灵,按键精灵脚本代码教程
  11. 【Plant Cell Physiol】R2R3-MYB调节因子FhPAP1在香雪兰花青素生物合成中的作用
  12. 直播:京东大数据的应用!
  13. python写一个表白程序带时间_python如何写出表白程序
  14. 泰克示波器TBS2000B 在大学基础实验室的应用
  15. poj解题报告——poj 1528 Perfection
  16. 巴拉巴拉一下戴森爷爷的产品发展历史
  17. 图解Python语法
  18. 常用汇编数据传输指令
  19. 百度地图获取城市名称
  20. 物联网行业4大潜在突破领域浅析

热门文章

  1. 日常生活中长高应该吃什么?
  2. 树莓派应用——RTC(DS3231)
  3. 动手搭建安卓开发环境
  4. 软科中国大学排名——计算机科学与技术专业
  5. flutter-照相机的使用
  6. uni-微信小程序 图片铺满屏幕
  7. centOS7, nginx 502 bad gateway
  8. 【EMCC】Oracle 13c OEM 安装测试(13.2.0.0)
  9. (超详细)读取mnist数据集并保存成图片
  10. 更改文件名spring boot项目起不来