开始使用这个功能强大且用途广泛的数据库。应用程序经常需要保存数据。无论您的用户是在创建简单的文本文档、复杂的图形布局、游戏进程,还是复杂的客户和订单号列表,软件通常用于生成数据。有许多方法可以存储数据以供重用。您可以将文本转储为INI、YAML、XML或JSON等配置格式,输出原始二进制数据,或将数据存储在结构化数据库中。SQLite是一个自包含的轻型数据库,可以轻松创建、解析、查询、修改和传输数据。下载SQLite3备忘录SQLite专用于公共领域,这在技术上意味着它不受版权保护,因此不需要许可证。如果您需要许可证,您可以购买产权担保。SQLite非常普遍,大约有1万亿个SQLite数据库在使用。每个基于Webkit的网络浏览器、现代电视、汽车多媒体系统和无数其他软件应用程序、Android和iOS设备、macOS和Windows10计算机以及大多数Linux系统上都包含该数据库的多个部分。总而言之,它是一个用于存储和组织数据的可靠而简单的系统。你的系统上可能已经有SQLite库,但你需要安装它的命令行工具才能直接使用它。在Linux上,您可能已经安装了这些工具。该工具提供的命令是sqlite3(不只是sqlite)。如果您的Linux或BSD上未安装SQLite,您可以从存储库或端口树安装SQLite,或者从源代码或编译的二进制文件下载并安装它。在macOS或Windows上,您可以从sqlite.org下载并安装SQLite工具。使用SQLite通过编程语言与数据库交互是很常见的。因此,Java、Python、Lua、PHP、Ruby、C++等编程语言为SQLite提供了接口(或“绑定”)。但是,在使用这些库之前,了解数据库引擎的实际情况以及选择数据库的重要性是很有帮助的。本文向您介绍SQLite和sqlite3命令,以便您熟悉该数据库如何处理数据的基础知识。与SQLite交互您可以使用sqlite3命令与SQLite交互。此命令提供了一个交互式shell,以便您可以查看和更新??数据库。$sqlite3SQLite版本3.34.02020-12-0116:14:00输入“.help”获取使用提示。连接到临时内存数据库。使用“.openFILENAME”在持久数据库上重新打开。sqlite>此命令会将您置于SQLite子外壳中,因此提示符现在是SQLite提示符。您过去使用的Bash命令在这里不再有效。你必须使用SQLite命令。要查看SQLite命令列表,请输入.help:sqlite>.help.archive...ManageSQLarchives.authON|OFFSHOWauthorizercallbacks.backup?DB?FILEBackupDB(DEFAULT"main")TOFILE.bailON|off遇到错误后停止。DEFAULTOFF.binaryON|off打开或关闭二进制输出。DEFAULTOFF.cdDIRECTORYCHANGEtheworkingdirectoryTODIRECTORY[...]这些命令中的一些是二进制的,而另一些则需要唯一的参数(例如文件名、路径等)。这些是SQLiteShell的管理命令,而不是数据库查询。数据库以结构化查询语言(SQL)查询,许多SQLite查询与您从MySQL和MariaDB数据库中已知的查询相同。但是,数据类型和功能不同,所以如果您熟悉其他数据库,请特别注意细微差别。创建数据库当你启动SQLite时,你可以打开一个内存数据库,或者你可以选择一个数据库来打开:$sqlite3mydatabase.db如果你还没有数据库,你可以在SQLite提示符下创建一个数据库:sqlite>.openmydatabase.db现在,你的硬盘上多了一个空文件,可以作为SQLite数据库使用。文件扩展名.db是任意的。您还可以使用.sqlite或任何您想要的后缀。创建表数据库包含一些表,可以将其可视化为电子表格。有很多行(在数据库中称为记录)和列。行和列的交集称为字段。结构化查询语言(SQL)因其提供的功能而得名:一种以可预测且一致的语法查询数据库内容以获得有用结果的方法。SQL读起来很像一个普通的英语句子,即使它有点机械化。当前,您的数据库是一个没有任何表的空数据库。您可以使用CREATE创建一个新表,您可以将其与IFNOTEXISTS结合使用。为了不破坏现有的同名表。在SQLite中不能创建没有任何字段的空表,因此在尝试CREATE语句之前必须考虑希望表存储的数据类型。在此示例中,我将创建一个名为member的表,其中包含以下列:唯一标识符人名时间和日期记录创建的唯一标识符最好通过记录的唯一编号来引用记录,幸运的是,SQLite可以识别这一点,创建一个名为rowid的列为您自动执行此操作。该字段可以在没有SQL语句的情况下创建。数据类型对于我的示例表,我正在创建一个名称列来保存TEXT类型的数据。为防止在未指定字段数据的情况下创建记录,可以添加NOTNULL指令。创建名称为TEXTNOTNULL的语句。SQLite中有五种数据类型(实际上是存储类):TEXT:文本字符串INTEGER:数字REAL:浮点数(小数位数不限)BLOB:二进制数据(例如.jpeg或.webp图像)NULL:空日期和时间戳SQLite有一个方便的日期和时间戳功能。它本身不是一种数据类型,而是SQLite中的一个函数,它根据所需的格式生成字符串或整数。在此示例中,我将其保留为默认值。创建该字段的SQL语句是:datestampDATETIMEDEFAULTCURRENT_TIMESTAMP。创建表的语句在SQLite中为这个示例表创建了完整的SQL:sqlite>CREATETABLE...>IFNOTEXISTS...>member(nameTEXTNOTNULL,...>datestampDATETIMEDEFAULTCURRENT_TIMESTAMP);在这个代码示例中,我在语句的子句之后按下了回车键。使其更易于阅读。SQLite不会运行你的SQL语句,除非它以分号(;)结束。您可以使用SQLite命令.tables验证表是否已创建:sqlite>.tablesmember以查看表中的所有列您可以使用PRAGMA语句验证表包含哪些列和行:sqlite>PRAGMAtable_info(member);0|名称|文本|1||01|datestamp|DATETIME|0|CURRENT_TIMESTAMP|0数据条目您可以使用INSERT语句将一些示例数据填充到表中:>INSERTINTOmember(name)VALUES('Alice');>INSERTINTOmember(name)VALUES('Bob');>INSERTINTOmember(name)VALUES('Carol');>INSERTINTOmember(name)VALUES('David');查看表中数据:>SELECT*FROMmember;Alice|2020-12-1522:39:00Bob|2020-12-1522:39:02Carol|2020-12-1522:39:05David|2020-12-1522:39:07添加多行数据现在创建首先两个表:>CREATETABLEIFNOTEXISTSlinux(...>distroTEXTNOTNULL);填充一些示例数据,这次使用小的VALUES快捷方式,这样您就可以在一个命令中添加多行。关键字VALUES需要一个带括号的列表,而多个列表由多个逗号分隔:>INSERTINTOlinux(distro)...>VALUES('Slackware'),('RHEL'),...>('Fedora'),('Debian');修改表结构你现在有两个表,但是到目前为止,两者之间没有任何关系。它们中的每一个都包含独立的数据,但您可能需要将第一个表的成员与第二个表中列出的特定项目相关联。为此,您为第一个表创建一个与第二个表相对应的新列。由于两个表都设计有唯一标识符(感谢SQLite的自动创建),连接它们的最简单方法是使用一个的rowid字段作为另一个的选择器。在第一个表中创建一个新列以将值存储在第二个表中:>ALTERTABLEmemberADDosINT;使用linux表中的唯一标识作为member表中每条记录中os字段的值。因为记录已经存在。所以你可以使用UPDATE语句而不是使用INSERT语句来更新数据。需要特别注意的是,你需要先选择一个特定的行,然后更新其中的一个字段。在句法上,它有点相反,更新先发生,选择匹配最后发生:>UPDATEmemberSETos=1WHEREname='Alice';对成员表中的其他行重复相同的过程。更新os字段以在四行记录上分配三个不同的版本(一个加倍)以实现数据多样性。连接表现在两个表是相关的,您可以使用SQL显示相关数据。加入数据库的方法有很多种,但是一旦掌握了基础知识,就可以尝试所有方法。这是一个基本的连接,将成员表的os字段中的值与linux表的rowid字段相关联:>SELECT*FROMmemberINNERJOINlinuxONmember.os=linux.rowid;Alice|2020-12-1522:39:00|1|SlackwareBob|2020-12-1522:39:02|3|FedoraCarol|2020-12-1522:39:05|3|FedoraDavid|2020-12-1522:39:07|4|Debianos与rowid字段相关联。在图形应用程序中,您可以将os字段想象成一个选项的下拉菜单,其值是linux表中distro字段中的数据。将具有唯一字段的相关数据集链接起来可确保数据的一致性和有效性,并且使用SQL,您可以在以后动态地链接它们。了解更多SQLite是一个非常有用的独立的、可移植的开源数据库。学习以交互方式使用它是针对Web应用程序管理它或通过编程语言库使用它的重要的第一步。如果您喜欢SQLite,也可以试试同一作者RichardHipp博士的Fossil。有一些常用命令可能对学习和使用SQLite有帮助,所以现在就下载我们的SQLite3速查表吧!
