SQLite 创建表

2025年6月2日 | 阅读 8 分钟

SQLite 是一种广泛使用的数据库系统,以其易用性和灵活性而闻名。与传统数据库相比,SQLite 不需要服务器或复杂的配置。它作为一个独立的、紧凑的解决方案运行,非常适合移动应用程序、小型应用程序,甚至嵌入式系统。它的便利性和用户友好性使其成为开发人员寻求简单数据库解决方案的首选。

在每个关系数据库(如 SQLite)的核心,都是表。表用作数据的存储,以行和列的形式组织。每一行代表一个单独的记录,而列则概述了该记录的特定特征,如姓名、年龄或电子邮件地址。这种结构化的格式保证了数据可以随时根据需要进行访问、修改或处理。

SQLite中,表是必不可少的,因为它们决定了数据的存储和管理。通过周到地组织表,开发人员可以保证数据库有效地运行并保持数据的完整性。无论您是开发用于监控费用的应用程序,还是管理待办事项列表,表都是数据结构化和访问方式的基础。

了解 CREATE TABLE 语句

在 SQLite 和其他基于 SQL 的数据库中,一个基本的命令是CREATE TABLE 语句。它通过在数据库中定义和创建一个表来建立存储数据的结构。借助此语句,开发人员可以指定表的名称、它将包含的列,以及任何额外的特征或限制,以保证数据的完整性。如果没有表的定义,SQLite 中有效的数据组织和存储将是不可能的。

CREATE TABLE 语句具有以下基本语法

  • table_name: 将要创建的表的名称。为了防止冲突,它在数据库中应该是唯一的。
  • 表的列名显示为列 1、2……每一列代表一条不同的信息。
  • Datatype: 指示列将包含的数据类型,例如 INTEGER、TEXT 或 REAL。
  • Constraint: 可选指南,用于保证数据的一致性和完整性,例如 PRIMARY KEY、NOT NULL 或 UNIQUE。

由于多种原因,必须在添加任何数据之前建立表的结构。一个设计良好的结构保证了数据库是有效的、结构良好的,并且能够处理查询。此外,它避免了冗余和不一致数据之类的问题。通过在一开始就精确地定义列、数据类型和限制,开发人员可以防止潜在的问题,并为其数据库操作奠定坚实的基础。

基本的 CREATE TABLE 示例

CREATE TABLE 语句是简单 SQLite 表创建过程中的第一步。下面提供了一个简单的示例,演示了如何构建一个名为 employees 的表,其中包含三列:id、name 和 salary。

让我们详细剖析这个示例

CREATE TABLE employees

  • 使用此命令,将创建一个名为 employees 的新表。为了防止冲突,数据库中的每个表名都应该是不同的。

id PRIMARY INTEGER KEY

  • 由于 ID 列声明为 INTEGER 类型,因此可以存储完整的数字。
  • 作为表的标识符,PRIMARY KEY 约束保证了 id 列中的每个值都是不同的。此外,它还表明 NULL 值不能出现在该列中。

Name TEXT NOT NULL

  • 字符可以存储在列名中,因为它被声明为 TEXT 类型。
  • 每个员工都必须有一个姓名,因为 NOT NULL 约束阻止此列具有空值或 NULL 值。

REAL salary

  • 由于 salary 列是 REAL 类型,因此它可以存储浮点值,这使得它适用于价格或工资之类的值。
  • 由于没有限制,此字段可以包含小数点或 NULL 值。

重要的 SQL 术语描述

  • CREATE: 此关键字指示已创建一个新的数据库对象——在本例中,是一个表。
  • INTEGER: 保存整数的列是使用 INTEGER 函数定义的。
  • TEXT: 用于提供用于字符串数据存储的列。
  • REAL: 应用于保存浮点数或小数的列。
  • PRIMARY KEY: 一种约束,保证此列中的值是不同的,并且充当唯一标识符,被称为主键。
  • NOT NULL: 这对于必填字段很有帮助,因为它保证了列不能有 NULL 值。

通过使用此示例,您可以设计一个简单的表结构,以满足应用程序的要求。开发人员可以使用 CREATE TABLE 语句精确地指定数据在数据库中的保存方式,从而保证一致性和可靠性。

SQLite 表中的数据类型

SQLite 使用的动态类型系统比在传统关系数据库管理系统中发现的类型系统更直接和更具适应性。它支持的五个基本数据类型,也称为存储类,决定了信息在列中的存储方式。

以下是每个类型的摘要

  • NULL: 代表没有数据或缺少值。当特别允许列包含空值时,会使用它。
  • INTEGER: 保存正整数和负整数。ID 计数和没有十进制精度的数字属性是常见应用的示例。
  • REAL: 代表浮点值,用于需要精确到小数点后几位的测量值或价格。
  • TEXT: 保存文本信息,如姓名、字符串和描述。SQLite 使用 UTF-8 编码来存储文本。
  • BLOB: 二进制大对象,或简称 BLOB,用于存储二进制数据,如文件、音频和照片。数据以其原始格式保存。

选择正确的数据类型

为了实现有效的存储和精确的查询,每个列都必须选择适当的数据类型。

例如

  • 对于只需要整数的列,如 ID、年龄或金额,请使用 INTEGER。
  • 对于需要小数精度的列,如工资或产品定价,请使用 REAL。
  • 对于基于字符串的数据,如姓名、地址或描述,请使用 TEXT。
  • 当处理二进制内容或媒体文件时,请使用 BLOB。

数据类型影响示例

看一下下面的两个表

在这种情况下,数据类型与预期的数据紧密匹配。例如,Price 是一种 REAL 类型,它接受像 19.99 或 100.50 这样的值。

相反

由于误用了数据类型,此表可能会导致查询失败和存储效率低下。例如,将姓名作为 REAL 保存是不合逻辑的,而将 product_id 视为 TEXT 可能会允许非数字 ID,从而导致差异。

SQLite 表中的约束

在 SQLite 中,约束是应用于表列的规则,目的是保证数据的一致性和完整性。约束通过对数据输入施加特定条件来帮助维护数据库的质量和可靠性。

最常见的限制解释如下

PRIMARY KEY

  • 确保每个数据库行都有一个唯一的身份。
  • 在指定为主键的列中不允许有重复值或 NULL 值。

NOT NULL

  • 阻止在列中接受 NULL 值。
  • 对于像 ID 或姓名这样的必填字段很有帮助。

UNIQUE

  • 保证列中的每个值都是唯一的。
  • 这可以防止像用户名和电子邮件地址这样的字段出现重复条目。

CHECK

  • 通过评估每一行的条件来验证数据是否满足预定的要求。
  • 例如,它可以将列限制为仅接受正值。

DEFAULT

  • 如果在数据输入期间没有显式提供值,则会将默认值分配给该列。
  • 对于像时间戳或默认状态这样的列,这尤其有用。

约束对于数据完整性的重要性

因为它们提供了维护数据库中保存的数据的精度和可靠性的规则,所以约束是必不可少的。如果没有限制,数据可能会变得不准确或不一致,这可能会导致错误的查询结果和可能的应用程序失败。例如,UNIQUE 约束可以防止两个用户具有相同的电子邮件地址,但电子邮件字段上的 NOT NULL 约束可以保证每个记录都有一个电子邮件地址。

带有约束的 CREATE TABLE 语句示例

  • 主键,user_id 列,保证每个用户都有一个不同的 ID。
  • 电子邮件地址和用户名必须不同,并且不能为 NULL。
  • CHECK 约束将 age 列限制为 18 或更高的值。
  • 如果没有提供值,则当前日期是 signup_date 的默认值。

此图示显示了限制如何协同工作以保证数据一致性和有效性,从而提高数据库的可靠性和可管理性。

高级表创建功能

SQLite 提供了高级表构建选项,可以更好地管理特定用例。临时表和 WITHOUT ROWID 表是两个值得注意的特征。

WITHOUT ROWID 表

默认情况下,每个 SQLite 表都有一个隐藏的 rowid 列,为每一行提供一个唯一的身份。在大多数情况下,这很有帮助,但对于已经设置了主键的表,它可能会增加不必要的开销。通过删除隐藏列,WITHOUT ROWID 数据库可以变得更小,并且在某些任务中可能更快。

示例

此表中不需要额外的 rowid,因为 order_id 列充当唯一标识符。在处理大数据集时,这可以最大限度地提高性能。

临时表

使用 TEMP 或 TEMPORARY 关键字创建的临时表是会话特定的,并且在会话结束时会自动删除。不需要在当前数据库连接之后持续存在的中间结果或瞬态数据最好存储在这些表中。

在这种情况下,只有当前会话可以访问 temp_sales 表。在会话结束后,该表及其内容会被自动删除。

增强功能的优势

  • 没有 ROWID 表的表,主键表效率更高,需要的存储空间更少。
  • 通过将临时数据与永久表分开,临时表可以简化流程。

由于这些特征,开发人员可以自定义数据库设计以实现灵活性和性能,保持 SQLite 的轻量级,同时满足各种需求。

构建一个可靠和有效的 SQLite 数据库需要理解 CREATE TABLE 语句。此命令建立了用于管理、存储和构造数据的框架。通过仔细创建具有正确列、数据类型和约束的表,开发人员可以保证数据的完整性并最大限度地提高数据库速度。一个经过仔细考虑的结构对于满足应用程序的要求至关重要,无论您是制作一个基本表,还是利用更复杂的功能,如限制和 WITHOUT ROWID 表。掌握 CREATE TABLE 命令对于任何开发人员来说都是必不可少的,因为它使您能够创建可靠、可扩展且易于维护的数据库。


下一个主题SQLite 删除表