Linux系统下安装SQLite3数据库的详细教程,如何在Linux系统下轻松安装SQLite3数据库?,想在Linux上快速安装SQLite3?这个教程一步到位!

04-09 6851阅读
在Linux系统中安装SQLite3数据库非常简单,主要通过包管理器即可完成,对于Debian/Ubuntu用户,使用命令sudo apt update && sudo apt install sqlite3即可自动安装最新版本;CentOS/RHEL系统则需执行sudo yum install sqlite,安装完成后,通过sqlite3 --version验证安装是否成功,SQLite3作为零配置的嵌入式数据库,安装后可直接使用sqlite3 数据库名.db命令创建或连接数据库文件,无需额外服务,该数据库还支持标准SQL语法,并可通过.help查看内置命令,对于开发者,建议额外安装libsqlite3-dev开发包以获取头文件和编译支持,整个过程无需复杂配置,5分钟内即可完成环境搭建。

SQLite3 简介与安装前的准备

SQLite 是一款轻量级的嵌入式关系型数据库管理系统,它以库的形式提供服务,不需要独立的服务器进程,数据库就是一个普通的文件,SQLite3 是 SQLite 的第三个主要版本,具有以下显著特点:

  1. 零配置:无需安装和管理配置,开箱即用
  2. 无服务器架构:不需要独立的服务器进程,直接访问数据库文件
  3. 单一磁盘文件:整个数据库存储在一个跨平台的磁盘文件中
  4. 跨平台兼容:支持所有主流操作系统(Linux、Windows、macOS等)
  5. 开源免费:完全免费的公共领域软件,无任何使用限制
  6. ACID 兼容:支持原子性、一致性、隔离性和持久性的事务特性
  7. 丰富的 API:支持多种编程语言接口

在开始安装之前,我们需要确认系统环境,大多数 Linux 发行版都预装了 SQLite3,但版本可能较旧,我们可以通过以下命令检查是否已安装以及当前版本:

sqlite3 --version

如果系统提示"command not found",则表示需要安装 SQLite3,本文将详细介绍在主流 Linux 发行版上安装 SQLite3 的方法,包括使用包管理器直接安装、从源代码编译安装,以及通过宝塔面板安装的便捷方式。

Linux系统下安装SQLite3数据库的详细教程,如何在Linux系统下轻松安装SQLite3数据库?,想在Linux上快速安装SQLite3?这个教程一步到位! 第1张 (SQLite3 轻量级架构示意图,图片来源网络)

使用系统包管理器安装 SQLite3

在 Debian/Ubuntu 系统上安装

对于基于 Debian 的系统如 Ubuntu,可以使用 apt 包管理器:

sudo apt update
sudo apt install sqlite3

安装完成后,建议同时安装命令行工具和开发文件以便开发使用:

sudo apt install sqlite3 libsqlite3-dev

在 CentOS/RHEL 系统上安装

对于基于 Red Hat 的系统如 CentOS,使用 yum 或 dnf:

# 传统 yum 安装方式
sudo yum install sqlite
# 或对于较新版本的 CentOS(8+)
sudo dnf install sqlite

安装开发文件(用于编程接口):

sudo yum install sqlite-devel

Linux系统下安装SQLite3数据库的详细教程,如何在Linux系统下轻松安装SQLite3数据库?,想在Linux上快速安装SQLite3?这个教程一步到位! 第2张 (CentOS系统安装过程示意图,图片来源网络)

在 Arch Linux 系统上安装

sudo pacman -S sqlite

从源代码编译安装 SQLite3(获取最新版本)

如果系统仓库中的 SQLite3 版本较旧,或者需要特定功能,可以从源代码编译安装最新版本。

下载源代码

首先访问 SQLite 官方网站(https://www.sqlite.org/download.html)获取最新版本的源代码,或使用 wget 直接下载:

wget https://www.sqlite.org/2023/sqlite-autoconf-3420000.tar.gz

解压并编译

tar xvfz sqlite-autoconf-3420000.tar.gz
cd sqlite-autoconf-3420000
./configure --prefix=/usr/local
make
sudo make install

验证安装

/usr/local/bin/sqlite3 --version

更新系统库缓存

sudo ldconfig

Linux系统下安装SQLite3数据库的详细教程,如何在Linux系统下轻松安装SQLite3数据库?,想在Linux上快速安装SQLite3?这个教程一步到位! 第3张 (源代码编译过程示意图,图片来源网络)

通过宝塔面板安装 SQLite3

宝塔面板是一款强大的服务器管理工具,可以简化许多 Linux 管理任务,包括软件安装,以下是使用宝塔面板安装 SQLite3 的方法。

安装宝塔面板

对于 CentOS 系统,可以使用以下一键安装脚本:

yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh

安装完成后,按照提示访问面板 URL,登录后进入软件管理界面。

通过宝塔面板安装 SQLite3

在宝塔面板中,SQLite3 通常已经作为基础组件安装,如果没有,可以通过以下步骤:

  1. 进入"软件商店"
  2. 搜索"SQLite"
  3. 点击安装

或者通过宝塔的终端直接运行安装命令:

btpip install pysqlite3

验证宝塔环境中的 SQLite3

python -c "import sqlite3; print(sqlite3.sqlite_version)"

SQLite3 的基本使用

创建数据库

sqlite3 test.db

这会创建一个名为 test.db 的数据库文件(如果不存在),并进入 SQLite 交互式 shell。

基本 SQL 操作

-- 创建表
CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 插入数据
INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com');
-- 查询数据
SELECT * FROM users;
-- 条件查询
SELECT name, email FROM users WHERE id = 1;
-- 更新数据
UPDATE users SET email='newemail@example.com' WHERE name='张三';
-- 删除数据
DELETE FROM users WHERE id = 1;

退出 SQLite shell

.quit

SQLite3 的高级配置与优化

配置 SQLite3 的内存模式

SQLite3 可以完全在内存中运行,提高性能:

sqlite3 ":memory:"

性能优化设置

在交互式 shell 中或通过 PRAGMA 语句设置:

PRAGMA journal_mode = WAL;  -- 使用Write-Ahead Logging模式,提高并发性能
PRAGMA synchronous = NORMAL;  -- 平衡安全性和性能
PRAGMA cache_size = -2000;  -- 设置2MB的缓存
PRAGMA temp_store = MEMORY;  -- 临时表存储在内存中
PRAGMA foreign_keys = ON;  -- 启用外键约束

备份数据库

sqlite3 test.db ".backup backup.db"

或者使用更高效的 clone 命令:

sqlite3 test.db "VACUUM INTO 'backup.db';"

SQLite3 的编程接口

SQLite3 支持多种编程语言的接口,以下是几种常见语言的示例。

Python 中使用 SQLite3

import sqlite3
from datetime import datetime
# 连接数据库(如果不存在则创建)
conn = sqlite3.connect('example.db', 
                      detect_types=sqlite3.PARSE_DECLTYPES |
                      sqlite3.PARSE_COLNAMES)
c = conn.cursor()
# 创建表
c.execute('''CREATE TABLE IF NOT EXISTS stocks
             (date timestamp, trans text, symbol text, qty real, price real)''')
# 插入数据
c.execute("INSERT INTO stocks VALUES (?,?,?,?,?)",
          (datetime.now(), 'BUY', 'RHAT', 100, 35.14))
# 批量插入
purchases = [('2023-06-05', 'BUY', 'IBM', 1000, 45.00),
             ('2023-06-06', 'SELL', 'MSFT', 500, 72.00)]
c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
# 查询数据
for row in c.execute('SELECT * FROM stocks ORDER BY date'):
    print(row)
# 保存更改
conn.commit()
# 关闭连接
conn.close()

PHP 中使用 SQLite3

<?php
$db = new SQLite3('test.db');
// 创建表
$db->exec('CREATE TABLE IF NOT EXISTS foo (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    bar STRING,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)');
// 插入数据
$db->exec("INSERT INTO foo (bar) VALUES ('This is a test')");
// 预处理语句防止SQL注入
$stmt = $db->prepare('INSERT INTO foo (bar) VALUES (:bar)');
$stmt->bindValue(':bar', 'Safe value', SQLITE3_TEXT);
$stmt->execute();
// 查询数据
$result = $db->query('SELECT * FROM foo');
while ($row = $result->fetchArray()) {
    var_dump($row);
}
$db->close();
?>

C 语言中使用 SQLite3

#include <stdio.h>
#include <sqlite3.h> 
static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
    for(int 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 *err_msg = 0;
    // 打开数据库
    int rc = sqlite3_open("test.db", &db);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    }
    // 创建表
    char *sql = "DROP TABLE IF EXISTS Cars;" 
                "CREATE TABLE Cars(Id INT PRIMARY KEY, Name TEXT, Price INT);" 
                "INSERT INTO Cars VALUES(1, 'Audi', 52642);" 
                "INSERT INTO Cars VALUES(2, 'Mercedes', 57127);" 
                "INSERT INTO Cars VALUES(3, 'Skoda', 9000);";
    rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
    if (rc != SQLITE_OK ) {
        fprintf(stderr, "SQL error: %s\n", err_msg);
        sqlite3_free(err_msg);        
        sqlite3_close(db);
        return 1;
    } 
    // 查询数据
    sql = "SELECT * FROM Cars";
    rc = sqlite3_exec(db, sql, callback, 0, &err_msg);
    sqlite3_close(db);
    return 0;
}

SQLite3 的图形化管理工具

虽然 SQLite3 主要是命令行工具,但也有图形界面管理工具:

  1. DB Browser for SQLite:跨平台的图形界面工具,支持可视化操作
  2. SQLiteStudio:功能丰富的 SQLite 管理工具,支持插件扩展
  3. VS Code 扩展:如 SQLite 插件,可在开发环境中直接操作数据库
  4. DBeaver:通用数据库工具,支持 SQLite 管理
  5. TablePlus:现代化数据库管理工具,支持 SQLite

安装 DB Browser for SQLite:

# Ubuntu/Debian
sudo apt install sqlitebrowser
# CentOS
sudo yum install sqlitebrowser
# macOS
brew install --cask db-browser-for-sqlite

SQLite3 的常见问题解决

安装后找不到 sqlite3 命令

可能是安装路径不在 $PATH 中,尝试:

export PATH=/usr/local/bin:$PATH

或创建符号链接:

sudo ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3

版本冲突问题

如果系统有多个 SQLite3 版本,可以指定完整路径:

/usr/local/bin/sqlite3 --version

数据库文件权限问题

确保运行 SQLite3 的用户对数据库文件有读写权限:

sudo chown -R $USER:$USER /path/to/database.db
sudo chmod 644 /path/to/database.db

数据库锁定问题

当遇到"database is locked"错误时,可以尝试:

  1. 确保没有其他进程正在使用该数据库
  2. 增加超时时间:sqlite3 "file:test.db?mode=rwc&timeout=5000"
  3. 检查是否启用了 WAL 模式

SQLite3 的最佳实践

  1. 定期备份:虽然 SQLite 很稳定,但定期备份数据库文件是必要的
  2. 使用事务:将多个操作放在一个事务中可以显著提高性能
  3. 合理设计索引:虽然 SQLite 是轻量级的,但良好的索引设计仍然重要
  4. 避免长时间持有连接:用完数据库后及时关闭连接
  5. 考虑并发访问:SQLite 在写入时会锁定整个数据库,高并发场景需要特别设计
  6. 使用预编译语句:防止 SQL 注入,提高性能
  7. 合理设置页面大小:根据应用特点设置合适的页面大小(默认 4096 字节)
  8. 启用外键约束:PRAGMA foreign_keys = ON 保证数据完整性
  9. 定期执行 VACUUM:回收未使用的空间,优化数据库性能
  10. 考虑内存数据库:对于临时数据或缓存,使用":memory:"数据库

SQLite3 作为一款轻量级但功能强大的数据库,在 Linux 系统上有广泛的应用场景,通过本文的介绍,您应该已经掌握了:

  1. 在 Linux 系统上安装 SQLite3 的多种方法
  2. SQLite3 的基本使用和高级配置技巧
  3. 各种编程语言中使用 SQLite3 的方法
  4. 常见问题的解决方案和最佳实践

无论您是开发小型应用程序,还是需要在嵌入式系统中使用数据库,SQLite3 都是一个值得考虑的解决方案,它的简单性、可靠性和零配置特性使其成为许多场景下的理想选择。

随着 SQLite 的持续发展,它已经不仅仅是一个简单的嵌入式数据库,而是成为了许多大型应用(如 Android 系统、浏览器等)的核心数据存储解决方案,掌握 SQLite3 的使用,将为您的开发工作带来极大的便利。


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]