SQLite3入门指南:安装、示例数据库及常用命令详解
SQLite3入门指南:安装、示例数据库及常用命令详解
SQLite是一个开源的关系型数据库引擎,具有零配置、自包含、独立事务等特点,被广泛应用于嵌入式系统和小型项目中。本文将详细介绍SQLite3的安装、示例数据库的使用以及SQLite3命令行工具的常用命令,帮助读者快速掌握SQLite3的基本使用方法。
SQLite是一个开源的,
零配置的 (zero-configuration),
自包含的 (self-contained),
独立的(stand-alone),
事务(transaction) 的关系型数据库引擎,
它被设计用于嵌入到应用程序中。
SQLite 数据库与访问数据库的应用程序集成。应用程序与 SQLite 数据库交互,直接从存储在磁盘上的数据库文件读取和写入。
SQLite显著的特点:
SQLite 对表使用 动态类型 。这意味着您可以在任何列中存储任何值,无论数据类型如何。
SQLite 允许 单个数据库连接同时访问多个数据库文件 。这带来了许多不错的功能,例如连接不同数据库中的表或通过单个命令在数据库之间复制数据。
SQLite能够创建运行速度非常快的内存数据库。
下载和安装SQLite3
参考教程: https://www.sqlitetutorial.net/download-install-sqlite/
SQLite数据库 GUI管理工具:https://github.com/pawelsalawa/sqlitestudio/releases
SQLite 示例数据库
SQLite示例数据库简介
Chinook 示例数据库是练习 SQL(尤其是 SQLite)的一个很好的数据库。以下数据库图说明了 Chinook 数据库表及其关系。
Chinook数据表介绍:
employees
存储员工数据,例如 ID、姓氏、名字等。它还有一个名为 ReportsTo 的字段,用于指定谁向谁报告。customers
表存储顾客数据invoices
和invoice_items
表:这两个表存储发票数据。发票表存储发票标题数据,invoice_items 表存储发票行项目数据。artists
存储艺术家数据。这是一个包含 id 和 name 的简单表。albums
表存储有关曲目列表的数据。每张专辑都属于一位艺术家。然而,一位艺术家可能拥有多张专辑。 artist与album是1对多的关系。media_types
表存储媒体类型,例如 MPEG 音频和 AAC 音频文件。genres
存储音乐类型,如摇滚乐,爵士乐等。tracks
存储歌曲数据。每个歌曲属于一张专辑。 track与album的关系是多对1的关系。 一张专辑上有可以有很多首歌。playlists
&playlist_track
表:playlists
表存储有关播放列表的数据。每个播放列表都包含一个tracks
列表。每个track
可以属于多个播放列表。播放列表playlists
和tyracks
表之间的关系是多对多的。playlist_track
表就是用来反映这种关系的。
下载SQLite示例数据库
Chinook数据库下载链接: https://www.sqlitetutorial.net/wp-content/uploads/2018/03/chinook.zip
下载SQList样例数据库图表: https://www.sqlitetutorial.net/wp-content/uploads/2018/03/sqlite-sample-database-diagram.pdf
下载SQLite样例数据库(多种颜色版本):https://www.sqlitetutorial.net/wp-content/uploads/2018/03/sqlite-sample-database-diagram-color.pdf
怎么去连接SQLite示例数据库
进入chinook.db数据库所在目录,在命令行窗口使用以下命令来连接
chinook数据库。
将会显示以下信息:
SQLite version 3.36.0 2021-06-18 18:36:39Enter ".help" for usage hints.sqlite>
使用 .tables
命令查看所有当前数据库中所有的表。
输出:
albums employees invoices playlistsartists genres media_types trackscustomers invoice_items playlist_track
使用 .eixt
命令退出sqlite3工具。
SQLite命令
下面介绍SQLite3中最常用的命令。
连接SQLite数据库
>sqlite3SQLite version 3.29.0 2019-07-10 17:32:03Enter ".help" for usage hints.Connected to a transient in-memory database.Use ".open FILENAME" to reopen on a persistent database.sqlite>
默认情况下,SQLite 会话使用内存数据库,因此,会话结束时所有更改都将消失。
要打开数据库文件,请使用 .open FILENAME
命令。以下语句打开 chinook.db
数据库:
sqlite> .open c:\sqlite\db\chinook.db
如果要在连接SQlite数据库时打开特定的数据库文件,可以使用以下命令:
>sqlite3 c:\sqlite\db\chinook.dbSQLite version 3.13.0 2016-05-18 10:57:30Enter ".help" for usage hints.sqlite>
如果您使用不存在的数据库名称启动会话,sqlite3 工具将创建数据库文件。
显示所有可用的命令
显示当前数据库连接的数据库
要显示当前连接中的所有数据库,请使用
.databases
命令。 .databases
命令显示至少一个名为:main 的数据库。
sqlite> .databaseseq name file--- --- ---0 main c:\sqlite\db\sales.db
要将数据库附加到当前连接,请使用 ATTACH DATABASE
语句。以下语句将 chinook 数据库添加到当前连接。
ATTACH DATABASE "c:\sqlite\db\chinook.db" AS chinook;
再次运行 .database
命令,会显示两个数据库
sqlite> .databasesseq name file--- --- ---0 main c:\sqlite\db\sales.db2 chinook c:\sqlite\db\chinook.db
退出SQLite3命令
使用命令.exit退出SQLite3程序。
显示数据库表上的所有表格
使用 .tables
命令显示当前数据库上的所有的表格。
>sqlite3 c:\sqlite\db\chinook.dbSQLite version 3.29.0 2019-07-10 17:32:03Enter ".help" for usage hints.sqlite> .tablesalbums employees invoices playlistsartists genres media_types trackscustomers invoice_items playlist_tracksqlite>
如果要查找基于特定模式的表,可以使用 .table 模式命令。sqlite3 使用 LIKE 运算符进行模式匹配。
例如,以下语句返回以'es'结尾的表格名。
.table '%es'employees genres invoices media_types
显示表格的结构
要显示表的结构,请使用 .schema TABLE 命令。TABLE 参数可以是一个模式。如果省略它,.schema 命令将显示所有表的结构。
sqlite> .schema albumsCREATE TABLE "albums"( [AlbumId] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, [Title] NVARCHAR(160) NOT NULL, [ArtistId] INTEGER NOT NULL, FOREIGN KEY ([ArtistId]) REFERENCES "artists" ([ArtistId]) ON DELETE NO ACTION ON UPDATE NO ACTION);CREATE INDEX [IFK_AlbumArtistId] ON "albums" ([ArtistId]);sqlite>
要显示 sqlite_stat
表的架构和内容,请使用 .fullschema
命令。
显示索引
要显示当前数据库的所有索引,请使用 .indexes
命令,如下所示:
sqlite> .indexesIFK_AlbumArtistIdIFK_CustomerSupportRepIdIFK_EmployeeReportsToIFK_InvoiceCustomerIdIFK_InvoiceLineInvoiceIdIFK_InvoiceLineTrackIdIFK_PlaylistTrackTrackIdIFK_TrackAlbumIdIFK_TrackGenreIdIFK_TrackMediaTypeId
.indexes albumsIFK_AlbumArtistId
使用%es 来显示以es结尾的索引
sqlite> .indexes %esIFK_EmployeeReportsToIFK_InvoiceCustomerId
将查询结果保存到文件
使用命令 .output FILENAME
将查询结果保存到文件里面。如果你只想将下一个单一查询的结果保存到文件中,那么你需要执行 .once FILENAME
命令。
要再次将查询结果显示到标准输出,你需要执行没有参数的 .output 命令。
以下命令从 albums 表中选择 title,并将结果写入 albums.txt 文件。
.output albums.txtSELECT title FROM albums;
执行文件中的SQL语句
假设在c:\sqlite\目录下有个commands.txt文件,该文件的内容如下:
SELECT albumid, titleFROM albumsORDER BY titleLIMIT 10;
为了执行commands.txt文件中的SQL语句,你可以使用 .read FILENAME命令
:
sqlite> .mode columnsqlite> .header onsqlite> .read c:/sqlite/commands.txtAlbumId Title--- ---156 ...And Justice For All257 20th Century Masters -296 A Copland Celebration,94 A Matter of Life and D95 A Real Dead One96 A Real Live One285 A Soprano Inspired139 A TempestadeTempestade203 A-Sides160 Ace Of Spades