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

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

SQL基本操作语句

目录

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产品 )

最新推荐

三菱MR-J2S伺服调试进阶秘籍:性能优化的3大黄金法则

![三菱MR-J2S伺服调试进阶秘籍:性能优化的3大黄金法则](https://d3i71xaburhd42.cloudfront.net/116ce07bcb202562606884c853fd1d19169a0b16/8-Table8-1.png) # 摘要 本文对三菱MR-J2S伺服调试进行了全面概述,从性能评估到调试实践,详细介绍了伺服系统的关键性能参数解读和常见性能问题的诊断方法。通过分析伺服系统在速度性能、精度性能、稳定性和响应性方面的具体案例,本文阐述了参数设置与优化、驱动器与电机的匹配以及负载适应性调整的重要性。进一步,本文总结了性能优化的三大黄金法则:减少系统惯量、提高控制

揭秘IMMO无线钥匙:如何保障车辆安全的5大加密机制

![揭秘IMMO无线钥匙:如何保障车辆安全的5大加密机制](https://pic.ntimg.cn/file/20200618/4094219_211857743752_2.jpg) # 摘要 IMMO无线钥匙作为汽车安全系统的关键组成部分,其概述、工作原理、加密机制、安全性分析、未来趋势以及实践案例是本文的讨论重点。本文首先对IMMO无线钥匙进行概述,然后深入探讨其系统组成和与车辆的通信机制。接着,文章详细分析了IMMO无线钥匙中采用的加密技术基础和系统中应用的特定加密方法,同时对安全性进行分析,包括潜在的安全漏洞、威胁和防御措施。文章还探讨了实验室测试和现场验证如何保证IMMO无线钥匙

深入理解KST_Ethernet_KRL:协议原理与应用:解锁工业通信的奥秘

![深入理解KST_Ethernet_KRL:协议原理与应用:解锁工业通信的奥秘](https://elearning.vector.com/pluginfile.php/84/mod_page/content/8/IP_4.2_GRA_EthernetPacket_DE.png) # 摘要 KST_Ethernet_KRL协议是一套专为工业应用设计的通信协议,提供了高效的工业控制系统和自动化生产线的数据交换机制。本文首先介绍了KST_Ethernet_KRL协议的基础架构、数据包格式、通信控制同步以及安全特性。随后,文章探讨了协议在工业控制系统和自动化生产线中的实际应用和案例分析。高级应用

性能优化实战:提升系统响应速度的5大秘诀

![一个系统软件工程师的方法论-弯曲评论.ppt](https://www.batimes.com/wp-content/uploads/2021/05/BATimes_Nov27_1.jpg) # 摘要 随着信息技术的飞速发展,系统响应速度已成为衡量用户体验和系统性能的重要指标。本文综合分析了系统响应速度的现状与面临的挑战,探讨了性能分析的基础理论,包括系统性能指标、瓶颈识别以及性能监控工具的使用。文章还详细阐述了硬件和软件层面的优化策略,如存储系统的提升、CPU资源管理、内存优化、数据库性能调优以及代码层面的改进。此外,本文深入研究了系统架构的优化,包括微服务架构的应用和网络性能的提升。

【VB编程深度剖析】:硬盘序列号读取背后的5个关键技术

![【VB编程深度剖析】:硬盘序列号读取背后的5个关键技术](https://www.sandfield.co.nz/media/g5tgmafp/symmetric-key-encryption.png) # 摘要 硬盘序列号读取是计算机硬件信息管理的关键技术之一。本文系统地介绍了硬盘序列号的概念、重要性及其在不同操作系统的API实现。通过深入分析硬盘识别技术基础和编程读取实践,文章展示了如何在Windows和Linux平台上实现硬盘序列号的读取。同时,本文探讨了在硬盘序列号读取过程中遇到的关键问题,如安全性、隐私保护、错误处理、性能优化和系统兼容性,并提出了相应的解决策略。最后,文章展望

【交换机芯片故障解决宝典】:专家分享诊断与维护的黄金技巧

![【交换机芯片故障解决宝典】:专家分享诊断与维护的黄金技巧](https://media.fs.com/images/community/upload/kindEditor/202109/28/vlan-configuration-via-web-user-interface-1632823134-LwBDndvFoc.png) # 摘要 交换机芯片作为网络设备的核心组件,在日常运营中扮演着至关重要的角色。芯片故障不仅会影响网络的稳定性和性能,还可能导致严重的网络中断。本文首先概述了交换机芯片故障的现状和其理论基础,探讨了芯片的工作原理及故障的类型和原因。随后,本文详细介绍了多种有效的诊断

【高速挑战】:掌握数控分频器设计的速度与精度权衡技巧

![【高速挑战】:掌握数控分频器设计的速度与精度权衡技巧](https://d3i71xaburhd42.cloudfront.net/1845325114ce99e2861d061c6ec8f438842f5b41/2-Figure1-1.png) # 摘要 本文全面介绍了数控分频器的设计方法、核心参数、实践技巧以及高级技术应用,并探讨了未来数控分频器设计的发展趋势和挑战。文章首先概述了数控分频器的设计基础,包括分频器的定义、分类、工作原理、核心参数以及设计过程中的速度与精度权衡。接着,详细介绍了硬件和软件设计实践的技巧,包括元件选择、PCB布局、控制算法实现及优化等。进一步,文章探讨了锁

VSCode中Python开发环境的搭建与优化:新手必看指南

![VSCode中Python开发环境的搭建与优化:新手必看指南](https://img-blog.csdnimg.cn/20210902110938933.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAbGF1X2p3,size_20,color_FFFFFF,t_70,g_se,x_16) # 摘要 随着Python编程语言的日益流行,一个高效的开发环境对于提高开发效率和代码质量至关重要。本文首先介绍了VSCode中Python开发环境的概览,然后详细说明了如何

【内存效率优化】:逻辑寻址算法改进,提升使用效率的关键

![【内存效率优化】:逻辑寻址算法改进,提升使用效率的关键](https://ask.qcloudimg.com/http-save/yehe-4700054/d7eeddb00e154b04e339406f02b92b6e.png) # 摘要 本文全面探讨了内存效率优化的基础概念、逻辑寻址算法的理论与实践,以及这些技术在现代操作系统中的应用,并展望了内存管理的未来趋势。通过深入分析内存寻址原理和逻辑寻址算法,如分页寻址、分段寻址和段页式寻址,本文详细讨论了提高寻址算法效率的关键指标和优化方法,包括内存碎片整理和预取技术。第三章提供了优化实践的案例研究,评估了优化效果,并在第四章中探讨了这些