如何在SQLite中使用PRIMARY KEY主键?详细介绍

2021年11月9日18:59:39 发表评论 3,661 次浏览

SQLite如何使用PRIMARY KEY?SQLite 是一个数据库管理系统,它和 MySQL 一样用于管理关系型数据库的数据,它也像其他数据库一样包含许多约束,如 UNIQUE、PRIMARY KEY 和 FOREIGN KEY。

SQLite中使用PRIMARY KEY:那么什么是约束以及它们如何在 SQLite 中工作?这篇文章是关于约束以及如何在 SQLite 中使用 PRIMARY 键约束的综合指南。

SQLite 中的约束是什么

约束是指将相同数据类型的数据插入到表中的原则,它组织了列的结构,也保证了存储在表中的数据的可靠性。有很多限制,其中一些是:

  • 首要的关键
  • 外键
  • 唯一约束
  • 默认约束
  • 检查约束

SQLite 中的 PRIMARY KEY 是什么

主键是表的唯一列,它确保插入列中的条目应该是唯一的,并且还用于引用其他表的外键。可以不使用主键创建表,但如果表使用主键,则只能为该表分配一个主键。在创建具有多种表的数据库时,主键是非常重要的,并且要在不同的数据库之间创建关系,就会使用主键。

主键必须遵循以下规则:

  • 主键的列不能定义为 NULL 值
  • 插入到主键列的行中的数据应该是唯一的
  • 主键应该被称为另一个表的特定外键
  • 该表只能包含一个主键

主键在数据库中不能是 NULL 值,但在 SQLite 的情况下,它可以被分配一个 NULL 值,因为“长期存在的编码监督”。

一张表应该只有一个主键,但是一个主键可以定义多个列,当多个列被用作一个主键时,称为复合主键。

SQLite中给任意表添加主键的几种方式

创建表时分配主键有两种方式,分别是:

  • 到表的单列
  • 到一个表的多列

如何创建一个表,将主键分配给 SQLite 中的一列

SQLite PRIMARY KEY用法示例 - 我们可以通过将主键分配给单个列来创建表,其一般语法为:

CREATE TABLE TABLE_NAME (column_name1 <datatype> PRIMARY KEY NOT NULL, column_name2 <datatype>);

此语法的解释如下:

  • CREATE TABLE 的子句用于创建表
  • 键入表名而不是 table_name
  • 键入列名而不是 column_name1,并写入其数据类型
  • 使用 PRIMARY KEY 子句,如果你将列分配为主键,并将其定义为 NULL 或 NOT NULL
  • 键入名称第二列替换 column_name2

为了理解它,考虑一个例子:我们创建一个学校学生表,具有唯一的学生 id,named,(std_id),和学生姓名,named,(std_name)。在此表中,学生姓名可以相同,但学生 id 不能相同,因此我们将主键分配给 std_id 为:

CREATE TABLE school_students (std_id INTEGER PRIMARY KEY NOT NULL, std_names);
如何在SQLite中使用PRIMARY KEY主键?详细介绍

已经创建了 school_students 表,有一个单列作为主键。

如何创建一个表,将主键分配给 SQLite 中的多个列

SQLite如何使用PRIMARY KEY?我们可以通过为多列分配一个主键来创建一个表,它的一般语法是:

CREATE TABLE TABLE_NAME (column_name1 <datatype> , column_name2 <datatype>, column_name3 <datatype>, PRIMARY KEY(column_name1, column_name2));

在上面的语法中,我们在语句的末尾定义了主键,括号中是要包含在主键中的列名。

再次理解这一点,我们考虑一个表employees_data的例子,我们将用emp_id、emp_name和emp_dep三列创建它,然后我们将emp_id和emp_name分配为PRIMARY KEY:

CREATE TABLE employees_data (emp_id INTEGER, emp_name TEXT, emp_dep TEXT,emp_name PRIMARY KEY(emp_id, emp_email));
如何在SQLite中使用PRIMARY KEY主键?详细介绍

该表已创建,主键中有两列。

如何在SQLite中向现有表添加主键

SQLite中使用PRIMARY KEY:我们不能使用 ALTER 子句向 SQLite 中的现有表添加主键,但要为 SQLite 中的表分配主键,我们将按照以下步骤操作:

  • 应检查外键约束
  • 将表重命名为其他名称
  • 创建一个与之前创建的结构相同的新表
  • 将数据从该表复制到该表
  • 删除重命名的表
  • 最后,开启外键约束

SQLite PRIMARY KEY用法示例 - 我们在数据库中有一个表,名为student_data,它没有主键,可以使用以下方法显示其内容:

SELECT * FROM students_data;
如何在SQLite中使用PRIMARY KEY主键?详细介绍

要为“id”分配主键,我们将运行以下命令:

PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
ALTER TABLE students_data RENAME TO new_students_data;
CREATE TABLE students_data (id INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL, attendance INTEGER NOT NULL);
INSERT INTO students_data  SELECT * FROM new_students_data;
DROP TABLE new_students_data;
COMMIT;
PRAGMA foreign_keys=ON;
如何在SQLite中使用PRIMARY KEY主键?详细介绍

要检查主键是否分配给名为 id 的列,请运行以下命令:

PRAGMA table_info([students_data]);
如何在SQLite中使用PRIMARY KEY主键?详细介绍
SQLite PRIMARY KEY用法示例

主键已成功分配给表students_data。

如何删除SQLite中的主键约束

SQLite如何使用PRIMARY KEY?像其他数据库一样,我们不能使用 DROP 和 ALTER 命令删除约束,要删除 PRIMARY KEY 约束,我们应该遵循相同的过程,我们选择将约束添加到现有表并重新定义表的结构而不定义主键任何列的键。让我们再次考虑上面添加主键的示例,我们将主键删除为:

PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
ALTER TABLE students_data RENAME TO new_students_data;
CREATE TABLE students_data (id INTEGER NOT NULL, name TEXT NOT NULL, attendance INTEGER NOT NULL);
INSERT INTO students_data  SELECT * FROM new_students_data;
DROP TABLE new_students_data;
COMMIT;
PRAGMA foreign_keys=ON;
如何在SQLite中使用PRIMARY KEY主键?详细介绍
SQLite PRIMARY KEY用法示例

SQLite中使用PRIMARY KEY总结

主键是非常有用的,特别是建立一个表与其他表的关系,因为外键总是指表的主键,而且一个表只有一个主键,但它的字段可以是一个或多个. 在本文中,我们讨论了如何在 SQLite 中使用主键,并通过示例讨论了如何将主键分配给一个或多个列以及已存在但没有主键的表。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: