SQLite操作语句详解:CRUD操作的基本语法

发布时间: 2023-12-19 02:17:19 阅读量: 53 订阅数: 24
目录

1. 简介

1.1 什么是SQLite

SQLite是一种轻量级的嵌入式关系型数据库管理系统,它可以在各种操作系统上运行,并且不需要服务器进程。它被广泛用作移动设备、嵌入式系统和小型应用程序的数据库存储解决方案。

1.2 SQLite的优势和应用领域

SQLite具有以下优势:

  • 零配置:无需服务器或者配置文件。
  • 事务性:完整支持事务属性,允许多个并发用户访问同一个数据库而不会影响用户数据完整性。
  • 高效性:SQLite的读取速度非常快,特别适用于嵌入式设备。
  • 跨平台:可以在Windows、MacOS、Linux等多个平台上运行。

SQLite的应用领域包括但不限于:

  • 移动应用程序的本地存储。
  • 小型服务器。
  • 替代文件格式的本地存储解决方案。

接下来我们将介绍如何使用SQLite进行数据库和表的创建。

2. 创建数据库和表

2.1 创建数据库

SQLite使用.open命令来打开一个数据库文件,如果文件不存在会自动创建该文件。在SQLite中,每个数据库是一个文件,因此可以通过文件系统来管理数据库文件。

  1. .open database_name.db

2.2 创建表

要在SQLite中创建表,可以使用CREATE TABLE语句,并指定表名以及各个列的名称和数据类型。

  1. CREATE TABLE table_name (
  2. column1 datatype,
  3. column2 datatype,
  4. column3 datatype,
  5. ....
  6. );

2.3 数据类型

SQLite支持以下几种数据类型:

  • INTEGER:整数类型
  • REAL:浮点类型
  • TEXT:文本类型
  • BLOB:二进制类型
  1. CREATE TABLE employees (
  2. id INTEGER PRIMARY KEY,
  3. name TEXT,
  4. age INTEGER,
  5. salary REAL
  6. );

在这个例子中,我们创建了一个名为employees的表,其中包含ID(整数类型)、姓名(文本类型)、年龄(整数类型)和工资(浮点类型)列。

通过以上示例,我们学习了如何在SQLite中创建数据库和表,以及SQLite所支持的数据类型。接下来,我们将深入学习如何插入数据到表中。

3. 插入数据

在SQLite中,可以使用INSERT语句向表中插入新的数据。本章将介绍如何插入单行数据、插入多行数据以及使用INSERT INTO SELECT语句插入数据。

3.1 插入单行数据

插入单行数据可以使用INSERT INTO语句,指定表名和要插入的数据。下面是一个示例:

  1. import sqlite3
  2. # 连接到数据库
  3. conn = sqlite3.connect('test.db')
  4. # 创建游标对象
  5. cursor = conn.cursor()
  6. # 定义要执行的SQL语句
  7. sql = "INSERT INTO student (id, name, age, grade) VALUES (1, 'Tom', 18, 'A')"
  8. # 执行SQL语句
  9. cursor.execute(sql)
  10. # 提交事务
  11. conn.commit()
  12. # 关闭游标和连接
  13. cursor.close()
  14. conn.close()

上述代码通过插入一行数据到名为student的表中。需要注意的是,表名和字段名需要与数据库中的实际表和字段对应,插入的数据需要与表的字段类型相匹配。

3.2 插入多行数据

如果需要插入多行数据,可以使用executemany()方法。下面是一个示例:

  1. import sqlite3
  2. # 连接到数据库
  3. conn = sqlite3.connect('test.db')
  4. # 创建游标对象
  5. cursor = conn.cursor()
  6. # 定义要执行的SQL语句
  7. sql = "INSERT INTO student (id, name, age, grade) VALUES (?, ?, ?, ?)"
  8. # 定义要插入的数据
  9. data = [
  10. (2, 'Alice', 17, 'B'),
  11. (3, 'Bob', 19, 'A'),
  12. (4, 'Charlie', 20, 'B')
  13. ]
  14. # 执行SQL语句
  15. cursor.executemany(sql, data)
  16. # 提交事务
  17. conn.commit()
  18. # 关闭游标和连接
  19. cursor.close()
  20. conn.close()

上述代码使用executemany()方法将多行数据插入到表中。需要注意的是,占位符?用来替代要插入的具体值,然后通过执行executemany()方法和传入数据的列表来一次性插入多行数据。

3.3 使用INSERT INTO SELECT语句插入数据

除了上述的插入方式,还可以使用INSERT INTO SELECT语句来插入数据。该语句可以将查询结果直接插入到目标表中。下面是一个示例:

  1. import sqlite3
  2. # 连接到数据库
  3. conn = sqlite3.connect('test.db')
  4. # 创建游标对象
  5. cursor = conn.cursor()
  6. # 定义要执行的SQL语句
  7. sql = "INSERT INTO student_new (id, name, age, grade) SELECT id, name, age, grade FROM student WHERE grade = 'A'"
  8. # 执行SQL语句
  9. cursor.execute(sql)
  10. # 提交事务
  11. conn.commit()
  12. # 关闭游标和连接
  13. cursor.close()
  14. conn.close()

上述代码将student表中grade为’A’的记录插入到student_new表中。可以根据实际需求编写不同的SELECT语句来获取要插入的数据。

4. 查询数据

在SQLite中,查询数据是非常常见和重要的操作。我们可以使用SELECT语句来获取数据库中的数据。下面将介绍SELECT语句的基本使用方法和常见的查询操作。

4.1 SELECT基本语句

SELECT语句用于从数据库中检索数据。其基本语法如下:

  1. SELECT 列名1, 列名2, ... FROM 表名;

其中,列名是要查询的字段名称,可以是单个字段,也可以是多个字段。使用星号(*)代表查询所有字段。

例如,我们有一个名为users的表,其中包含了idnameage等字段,我们可以使用以下语句查询所有用户的姓名和年龄:

  1. SELECT name, age FROM users;

4.2 条件查询

除了查询所有数据,我们还经常需要根据某些条件查询特定的数据。在SELECT语句中,我们可以使用WHERE子句来指定查询条件。

WHERE子句的语法如下:

  1. SELECT 列名1, 列名2, ... FROM 表名 WHERE 条件;

其中,条件是一个逻辑表达式,可以使用比较运算符(如等于、大于、小于)、逻辑运算符(如AND、OR)和通配符(如%、_)等进行条件筛选。

例如,我们可以使用以下语句查询年龄大于等于18岁的用户:

  1. SELECT name, age FROM users WHERE age >= 18;

4.3 使用ORDER BY排序数据

在查询数据时,我们通常希望按照某个字段的值进行排序,以便更好地查看和分析数据。在SQLite中,我们可以使用ORDER BY子句来对结果进行排序。

ORDER BY子句的使用方法如下:

  1. SELECT 列名1, 列名2, ... FROM 表名 ORDER BY 排序字段 [ASC|DESC];

其中,排序字段是要排序的字段名,ASC代表升序(默认),DESC代表降序。

例如,我们可以使用以下语句按照年龄从小到大的顺序查询用户信息:

  1. SELECT name, age FROM users ORDER BY age ASC;

4.4 使用LIMIT限制结果集

在查询数据时,有时我们只需要获取部分数据,而不是全部结果。在SQLite中,我们可以使用LIMIT子句来限制结果集的数量。

LIMIT子句的使用方法如下:

  1. SELECT 列名1, 列名2, ... FROM 表名 LIMIT 数量 OFFSET 偏移量;

其中,数量表示要获取的记录数量,偏移量表示跳过的记录数量(可选)。

例如,我们可以使用以下语句查询前5个用户的信息:

  1. SELECT name, age FROM users LIMIT 5;

以上就是查询数据的基本用法和常见操作。通过灵活运用SELECT语句和相关子句,我们可以根据需要来获取数据库中的数据。

5. 更新数据

在SQLite中,更新数据使用UPDATE语句,可以更新现有的记录。

5.1 使用UPDATE语句更新单行数据

下面是一个示例,假设我们有一个名称为students的表格,其中包含idnameage字段。现在我们要更新id为1的学生的姓名:

  1. UPDATE students
  2. SET name = 'NewName'
  3. WHERE id = 1;

注释: 这个SQL语句将会把students表中id为1的学生的姓名改为NewName

5.2 使用UPDATE语句批量更新数据

如果我们需要批量更新数据,也可以使用UPDATE语句。以下是一个示例,假设我们要将所有学生的年龄增加2岁:

  1. UPDATE students
  2. SET age = age + 2;

注释: 这个SQL语句将会把students表中所有学生的年龄都增加2岁。

5.3 使用UPDATE语句更新指定条件的数据

有时候我们只想更新符合特定条件的数据,下面是一个例子,假设我们要把所有名字为Tom的学生年龄都修改为25岁:

  1. UPDATE students
  2. SET age = 25
  3. WHERE name = 'Tom';

注释: 这个SQL语句将会把students表中所有名字为Tom的学生的年龄都修改为25岁。

在本章中,我们学习了如何使用UPDATE语句来更新SQLite中的数据。

6. 删除数据

在SQLite中,我们可以使用DELETE语句来删除数据。删除操作可以删除单行数据,也可以批量删除数据,还可以根据条件删除指定的数据。

6.1 使用DELETE语句删除单行数据

要删除单行数据,我们可以使用DELETE语句结合WHERE子句来限定删除的条件。下面是一个示例代码,演示了如何删除表中的一行数据:

  1. import sqlite3
  2. # 连接到数据库
  3. conn = sqlite3.connect('example.db')
  4. # 创建游标对象
  5. cursor = conn.cursor()
  6. # 删除一行数据
  7. cursor.execute("DELETE FROM students WHERE id = 1")
  8. # 提交事务
  9. conn.commit()
  10. # 关闭游标和连接
  11. cursor.close()
  12. conn.close()

以上代码中,我们首先通过connect()方法连接到数据库,然后创建一个游标对象。接着,我们使用execute()方法执行DELETE语句,指定要删除的条件。在本例中,我们删除了表中id为1的行数据。最后,通过commit()方法提交事务,将修改保存到数据库中。最后,关闭游标和连接。

6.2 使用DELETE语句批量删除数据

如果我们需要批量删除数据,可以使用DELETE语句结合IN子句来指定多个删除条件。下面是一个示例代码,演示了如何删除表中的多行数据:

  1. import sqlite3
  2. # 连接到数据库
  3. conn = sqlite3.connect('example.db')
  4. # 创建游标对象
  5. cursor = conn.cursor()
  6. # 删除多行数据
  7. ids = [2, 3, 4]
  8. cursor.execute("DELETE FROM students WHERE id IN (?)", (",".join(map(str, ids)),))
  9. # 提交事务
  10. conn.commit()
  11. # 关闭游标和连接
  12. cursor.close()
  13. conn.close()

在以上代码中,我们首先定义了一个包含要删除行的id的列表ids。然后,我们使用JOIN()方法将ids列表转换为字符串形式,并将其作为参数传递给DELETE语句的IN子句。通过在执行DELETE语句之前,将参数传递给execute()方法作为元组的方式,我们可以确保参数值被正确转义和引用。最后,我们提交事务并关闭游标和连接。

6.3 使用DELETE语句删除指定条件的数据

如果需要删除满足特定条件的数据,可以在DELETE语句的WHERE子句中指定条件。下面是一个示例代码,演示了如何删除表中满足特定条件的数据:

  1. import sqlite3
  2. # 连接到数据库
  3. conn = sqlite3.connect('example.db')
  4. # 创建游标对象
  5. cursor = conn.cursor()
  6. # 删除满足特定条件的数据
  7. cursor.execute("DELETE FROM students WHERE GPA < 3.0")
  8. # 提交事务
  9. conn.commit()
  10. # 关闭游标和连接
  11. cursor.close()
  12. conn.close()

在以上代码中,我们使用DELETE语句的WHERE子句指定了满足GPA < 3.0条件的数据将被删除。执行DELETE语句后,我们通过commit()方法提交事务,并通过关闭游标和连接来完成删除操作。

在本章中,我们学习了如何使用DELETE语句删除数据。我们可以通过指定单个删除条件、多个删除条件或满足特定条件来删除数据。删除数据是维护数据库中数据的重要操作,在实际应用中经常会遇到。通过掌握删除数据的操作,我们可以更好地利用SQLite数据库来管理数据。

corwn 最低0.47元/天 解锁专栏
买1年送3月
点击查看下一篇
profit 百万级 高质量VIP文章无限畅学
profit 千万级 优质资源任意下载
profit C知道 免费提问 ( 生成式Al产品 )

相关推荐

LI_李波

资深数据库专家
北理工计算机硕士,曾在一家全球领先的互联网巨头公司担任数据库工程师,负责设计、优化和维护公司核心数据库系统,在大规模数据处理和数据库系统架构设计方面颇有造诣。
专栏简介
本专栏旨在深入探讨SQLite数据库的各个方面,涵盖了数据库基础入门、操作语句、优化技巧、数据类型、导入导出、多表查询、事务处理、触发器、约束条件、视图、备份恢复、与编程语言的结合、数据加密、迁移升级、移动端应用、全文检索以及性能监控工具等内容。从数据库的创建和连接到高级的特性与技巧,都有详细的讲解和示例。无论您是初学者还是有一定经验的开发者,都能从中获得对SQLite数据库全面深入的理解和实际操作经验。专栏内容涵盖了数据库的广泛应用场景,力求帮助读者掌握SQLite数据库的核心概念、最佳实践和高效操作技巧,旨在提升数据库操作效率,保障数据安全,解决实际开发中遇到的各种问题,以及优化数据库性能。
最低0.47元/天 解锁专栏
买1年送3月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )

最新推荐

极爽词库构建指南:打造个人定制化五笔输入体验,提升工作效率

![极爽词库构建指南:打造个人定制化五笔输入体验,提升工作效率](http://funinput.com/images/mac-2_3-110721.jpg) # 摘要 本文系统探讨了五笔输入法的原理及词库定制的重要性与实施细节。文章首先阐述了五笔输入法与词库的重要性,深入解析了五笔输入法的编码机制,包括汉字的拆分原则和字根与编码之间的关系。接着,文章对定制词库的概念进行了需求分析,并强调了个性化词库的价值。在词库构建工具与数据准备方面,介绍了常用工具功能和数据收集、整理的方法。文章还涉及了词库定制与优化的实践操作,包括结构设定、词条添加编辑,以及通过测试和反馈进行性能评估。最后,讨论了词库

【IMU误差分析】:MPU6050案例研究揭秘惯性测量误差来源

![【IMU误差分析】:MPU6050案例研究揭秘惯性测量误差来源](https://i1.hdslb.com/bfs/archive/5923d29deeda74e3d75a6064eff0d60e1404fb5a.jpg@960w_540h_1c.webp) # 摘要 惯性测量单元(IMU)在许多领域中发挥着关键作用,尤其在精确测量方面,误差控制至关重要。本论文详细介绍了IMU核心组件MPU6050的结构、工作原理及信号处理流程。通过对MPU6050的理论误差分析,本文建立了误差模型,并探讨了误差补偿技术。进一步,本研究通过实证分析验证了误差校正实践的效用,并探索了高级误差控制技术,包括

【技能升级秘籍】:应届生IT行业必备基础知识构建

![【技能升级秘籍】:应届生IT行业必备基础知识构建](https://biz.libretexts.org/@api/deki/files/40119/Figure-7.10.jpg?revision=1) # 摘要 随着IT行业的迅速发展,对技术人员的知识结构和技能提出了更高的要求。本文综合介绍了IT行业的现状与发展趋势,分析了计算机科学的核心理论,包括体系结构、数据结构与算法、软件工程及项目管理。在此基础上,探讨了编程语言的选择、学习路径以及实战项目的重要性和实现方法。进一步地,本文深入讲解了网络与数据库技术,突出网络基础、数据库设计、云服务与虚拟化技术的应用。最后,前瞻性地审视了人工

【无线网卡代码56专家指南】:深入分析驱动错误,确保网络连接稳定

![【无线网卡代码56专家指南】:深入分析驱动错误,确保网络连接稳定](https://4sysops.com/wp-content/uploads/2022/04/Disabling-NBT-on-a-network-interface-using-GUI-1.png) # 摘要 无线网卡驱动错误是影响计算机网络连接稳定性的常见问题,本文对无线网卡驱动错误的理论基础进行了探讨,并提供了详细的分析与故障排除方法。文章着重分析了驱动错误的类型及其成因,例如硬件兼容性和软件冲突,并介绍了多种诊断工具和技术。此外,本文还提供了无线网卡驱动安装、配置与更新的最佳实践以及性能优化和稳定性保障的策略。最

Axis2_WebService与Spring整合:打造无懈可击的微服务架构

![Axis2_WebService与Spring整合:打造无懈可击的微服务架构](https://restfulapi.net/wp-content/uploads/What-is-REST.png) # 摘要 本文详细探讨了Axis2和Spring框架整合的技术细节与高级应用,以及在实际业务场景中的案例分析与实践。首先,文章介绍了Axis2的核心概念、架构和Spring框架的主要特性,并叙述了如何搭建开发环境和进行基础配置。接着,文中阐述了创建和部署WebService服务的方法,并进一步讨论了整合过程中的高级配置,包括参数绑定、依赖注入、性能优化、事务管理和安全性配置,以及服务发现与注

【STM32程序调试必学】:利用BOOT引脚实现高效模式选择

![【STM32程序调试必学】:利用BOOT引脚实现高效模式选择](https://community.st.com/ysqtg83639/attachments/ysqtg83639/stm32-mcu-cubeprogrammer-forum/753/1/STM32CubeProgrammer.png) # 摘要 本文全面探讨了STM32程序调试的过程,特别是BOOT引脚的深入理解及其在启动流程、配置实践中的应用。文章从BOOT引脚的功能开始,详细阐述了其在不同BOOT模式下的作用,以及如何影响系统启动顺序和内存映射。在此基础上,本文提出了高效模式选择的策略,强调了在不同调试需求下选择合

让数据说话:用Python绘制美观曲线图的5个步骤

![让数据说话:用Python绘制美观曲线图的5个步骤](https://simplificandoredes.com/wp-content/uploads/2023/08/bibliotecas-python-data-science-1024x576.jpg) # 摘要 数据可视化是将复杂数据集转换为直观、易于理解的图形表现形式的过程。本文首先介绍了数据可视化和Python绘图工具的基础知识,随后详细探讨了如何准备和组织数据以绘制曲线图。通过深入讲解Python中强大的绘图库Matplotlib,包括其安装、基本使用、元素调整和美化技巧,本文提供了一系列实用的方法和步骤。此外,本文还涵盖
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部