SQLite是一个轻量级的、文件系统基础的数据库引擎,它实现了自给自足的、无服务器的SQL数据库引擎。
Linux系统:
-
大多数Linux发行版已经预装了SQLite。可以通过运行
sqlite3
命令来检查是否已安装。 -
sudo apt-get -y install sqlite
-
如果未安装,可以访问SQLite的官方下载页面下载源代码包
sqlite-autoconf-*.tar.gz。
-
解压并进入下载的源代码包目录,依次运行以下命令进行编译安装:
tar xvzf sqlite-autoconf-*.tar.gz
cd sqlite-autoconf-*
./configure --prefix=/usr/local
make
make install
安装完成后,使用sqlite3
命令验证安装
启动SQLite:
在命令行中输入sqlite3
,进入SQLite的交互式命令行界面。
打开数据库:
在命令行中使用 sqlite3
命令打开数据库文件。如果数据库文件不存在,SQLite 将会自动创建它。
sqlite3 mydatabase.db
这将打开(或创建)名为 mydatabase.db
的数据库,并进入 SQLite 的交互式命令行界面。
创建数据库:
直接使用sqlite3
命令加上数据库文件名,如sqlite3 mydatabase.db
,即可创建一个新的数据库文件并打开它
查看帮助信息:
在SQLite命令行中输入.help
,可以查看SQLite的使用提示。
关闭数据库:
在 SQLite 命令行界面中,使用 .quit
命令或 .exit
命令来关闭数据库连接并退出。
.quit
或者
.exit
增删改查(CRUD)语句:
-
在SQLite中执行增删改查(CRUD)操作,我们将使用前面提到的
users
表结构作为例子。下面是针对该表的CRUD操作的基本SQL模板:表结构参考:
CREATE TABLE users ( id INTEGER PRIMARY KEY, username TEXT NOT NULL UNIQUE, email TEXT NOT NULL, age INTEGER );
1. 插入(Create)- 向
users
表中添加新用户:INSERT INTO users (username, email, age) VALUES ('john_doe', 'john@example.com', 30);
2. 查询(Read)- 从
users
表中查询数据:-
查询所有用户:
SELECT * FROM users;
-
查询特定条件的用户(例如,查找所有年龄大于30的用户):
SELECT * FROM users WHERE age > 30;
3. 更新(Update)- 更新
users
表中的现有用户信息:-
更新特定用户的电子邮件(例如,更新ID为1的用户):
UPDATE users SET email = 'new_john@example.com' WHERE id = 1;
4. 删除(Delete)- 从
users
表中删除用户:-
删除特定用户(例如,删除ID为1的用户):
DELETE FROM users WHERE id = 1;
附加SQLite操作模板:
-
插入或替换 - 如果记录存在则替换,不存在则插入(使用
REPLACE INTO
):REPLACE INTO users (id, username, email, age) VALUES (1, 'john_doe', 'john@example.com', 30);
注意:
REPLACE INTO
会删除旧记录并插入新记录,适用于当新记录的id
冲突时。 -
插入或忽略 - 如果记录存在则忽略插入,不存在则插入(使用
INSERT OR IGNORE INTO
):INSERT OR IGNORE INTO users (id, username, email, age) VALUES (1, 'john_doe', 'john@example.com', 30);
-
批量插入 - 一次性插入多条记录:
INSERT INTO users (username, email, age) VALUES ('jane_doe', 'jane@example.com', 25), ('alice_smith', 'alice@example.com', 28);
-
删除满足条件的多条记录 - 例如,删除所有没有提供电子邮件的用户:
DELETE FROM users WHERE email IS NULL;
-
更新满足条件的多条记录 - 例如,将所有年龄大于30的用户的电子邮件更新为一个通用邮件:
UPDATE users SET email = 'default@example.com' WHERE age > 30;
-
使用事务 - 执行一组需要同时成功或失败的SQL语句:
BEGIN TRANSACTION; -- 一系列 SQL 语句 COMMIT; -- 提交事务
SQLite支持标准的SQL语法,并提供了一些特定的命令和函数,使其成为处理轻量级数据库任务的理想选择。
-
其他常用语句:
-
显示数据库中所有表:
.tables
-
显示表的结构:
.schema my_table
-
启用/禁用扩展:
PRAGMA compile_options;
-
事务控制 - 开始事务、提交事务、回滚事务:
BEGIN TRANSACTION; -- 一系列 SQL 语句 COMMIT; -- 提交事务 ROLLBACK; -- 回滚事务
SQLite 的命令行界面提供了一个方便的方式来执行 SQL 语句和浏览结果。对于更复杂的应用程序,SQLite 也可以通过各种编程语言的库进行操作。
查看数据库的记录
select * from stu; //查询所有字段的结果
select name,score from stu; //查询数据库中部分字段的内容
打开**/创建数据库的C接口**
下面的 C 代码段显示了如何连接到一个现有的数据库。如果数据库不存在,那么它就会被创建,最后将
返回一个数据库对象
该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。
sqlite3_close(sqlite3*)
该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完
成。
如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。
const char *sqlite3_errmsg(sqlite3*);
sqlite3_errcode() 通常用来获取最近调用的API接口返回的错误代码.
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
sqlite3 *db;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("test.db", &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
exit(0);
}else{
fprintf(stderr, "Opened database successfully\n");
}
sqlite3_close(db);
}
创建表的C接口
思路,不编写
-
包含头文件:
-
包含
stdio.h
用于输入输出函数,stdlib.h
用于内存分配和进程退出,sqlite3.h
提供SQLite的C语言接口。
-
-
定义回调函数:
-
定义一个
callback
函数,该函数将由sqlite3_exec
用于处理查询结果。此函数接收查询列名和值,并打印它们。
-
-
编写 main 函数:
-
在
main
函数中,声明所需的变量,包括数据库连接指针db
、错误消息zErrMsg
、返回码rc
,以及SQL语句字符串sql
。
-
-
打开数据库:
-
使用
sqlite3_open
函数尝试打开或创建数据库文件。检查返回状态,如果打开失败,打印错误并退出程序。
-
-
编写SQL语句:
-
构造SQL语句字符串,可以是INSERT、UPDATE、DELETE或SELECT语句。在您的示例中,是一个DELETE语句后跟一个SELECT语句。
-
-
执行SQL语句:
-
使用
sqlite3_exec
函数执行SQL语句。对于非查询语句,回调函数参数可以为NULL
。对于查询语句,提供回调函数和用户定义数据。
-
-
错误处理:
-
检查
sqlite3_exec
的返回状态。如果执行失败,打印错误消息,释放错误消息内存,并退出。
-
-
操作反馈:
-
如果SQL执行成功,打印操作完成的反馈信息。
-
-
关闭数据库连接:
-
使用
sqlite3_close
函数关闭数据库连接,释放所有相关资源。
-
-
返回程序状态:
-
返回0表示程序正常结束。
-
SQLite和MySQL是两种流行的数据库系统,但它们在设计、用途和性能方面有着显著的不同。
SQLite的优点:
-
轻量级:SQLite是一个轻量级的数据库,不需要复杂的安装过程。
-
易于部署:作为一个单一的文件,SQLite易于分享和部署。
-
无需配置:没有复杂的配置或初始化过程。
-
跨平台:可以在多种操作系统上运行,包括移动平台。
-
适合小型应用:对于小型应用或轻量级需求,SQLite是一个很好的选择。
-
内嵌式:可以作为库被嵌入到应用程序中,与应用程序一起编译和分发。
-
无需独立的服务器进程:作为进程库运行,不需要独立的数据库服务器。
SQLite的缺点:
-
并发限制:虽然有并发机制,但SQLite在高并发环境下的性能可能受限。
-
写操作锁定:在写操作时,整个数据库文件会被锁定,可能会影响性能。
-
有限的SQL功能:相比MySQL,SQLite的SQL功能可能不够全面。
-
不适合大规模数据:对于大规模数据集,SQLite可能不是最佳选择。
MySQL的优点:
-
高性能:MySQL为高并发和大数据量环境设计,性能优越。
-
强大的功能:支持复杂的查询、存储过程、触发器和视图。
-
灵活性和可扩展性:可以处理从小规模到大规模的各种数据库需求。
-
社区和支持:拥有庞大的开发者社区和商业支持。
-
多用户多线程:支持多用户并发访问和多线程,适合多用户环境。
-
成熟的技术:经过多年发展,技术成熟稳定。
MySQL的缺点:
-
需要配置和维护:相比SQLite,MySQL需要更多的配置和维护工作。
-
安装和部署复杂:需要安装数据库服务器,配置网络和安全性。
-
资源消耗:相比SQLite,MySQL作为服务运行,需要更多的系统资源。
-
学习曲线:对于初学者,MySQL可能有一个较陡峭的学习曲线。
-
可能涉及许可费用:虽然MySQL有免费版本,但某些高级特性或服务可能需要付费。
总结:
-
SQLite:适合轻量级、小型应用、嵌入式系统、原型开发,以及需要快速部署的场景。
-
MySQL:适合需要高性能、可扩展性、多用户访问和复杂数据处理的大型应用。