约束是指适用于一个表的特定列的限制或约束。有时,它指的是分配给特定列的额外权限。其中一个约束是SQL数据库中的NOT NULL约束。无论哪一列被指定为NOT NULL约束,该列都不能没有值。因此,我们决定在Ubuntu 20.04上实现这篇文章时,介绍一下SQLite数据库中NOT NULL约束的使用。在说明在SQLite数据库中使用NOT NULL约束之前,我们必须通过Ctrl+Alt+T指令打开Ubuntu终端,并使用下面的指令更新和升级我们的系统。

请确保在你的Linux系统上已经安装了SQLite C-library of SQL。之后,你需要使用关键字 "sqlite3 "在shell终端启动它。静态shell将在Ubuntu 20.04的shell中为SQLite数据库打开。

让我们列出在SQLite数据库中发现的所有表。因此,我们将尝试使用".tables "指令来做这件事。Sqlite3数据库还不包含任何数据库(也就是说,根据".tables "指令。)

约束只能应用于表的列。如果我们没有任何表,那么我们就没有任何列。因此没有约束。因此,我们必须在数据库中创建一个表,我们可以在上面应用NOT NULL约束条件。因此,数据库允许我们使用CREATE TABLE指令来创建一个名为 "Test "的表。这个表将包含2列 "ID "和 "Name"。列ID将是整数类型,并将作为表的主键使用。Name "列将是文本类型,并且根据创建表时指定的NOT NULL约束的使用,不得为空。现在,根据".tables "指令,我们在数据库中有了一个新的表 "Test"。

使用SELECT指令来获取Test表的记录,显示该表现在是空的。所以,我们需要先向它添加一些记录。
>> SELECT \* FROMTest;

我们将使用SQL的INSERT INTO指令,在表的名称和它的列后面插入数据记录在它的列中。你需要在 "VALUES "关键字之后添加记录,后面的简单括号中共有10条记录。到目前为止,没有任何记录被指定为列 "Name "的空值,如下图所示。
INSERT INTOTest(ID,Name) VALUES (1, "George" ), (2, "Bella" ), (3, "Paul" ), (4, "Johny"),
(5, "Ketty" ), (6, "Angelina" ), (7, "Nina" ),(8, "Dilraba" ), (9, "Tom" ), (10, "Tyalor" );
INSERT INTOTest(ID,Name) VALUES (11,"" ), (12, "");
INSERT INTOTest(ID,Name) VALUES (11), (12);
INSERT INTOTest(ID,Name) VALUES (13, NULL), (14, NULL) 。

在向Test表插入记录后,我们尝试用SELECT指令在我们的SQLite shell上显示所有数据。它显示了ID和Name列的10条记录。
>> SELECT \* FROMTest;

让我们看看在向Test表的 "Name "列插入数据时,NOT NULL约束对空格和NULL关键字有什么反应。所以,我们在INSERT INTO指令的VALUES部分使用了空值""来代替 "Name "列的位置。记录已被成功添加到表Test中。在shell上使用SELECT指令后,我们发现在记录11和12中,"Name "列没有显示任何信息,而是将空格作为NOT NULL值。

如果你尝试使用包含NOT NULL约束的列名的INSERT INTO指令,并且不为某一列添加值,那么它将抛出一个错误。"2列1值",如下图所示。为了消除这个错误,你需要为 "Name "列添加一个值,不要让它为空。

让我们在INSERT INTO指令的VALUES部分加上NULL关键字,为包含NOT NULL约束的 "Name "列添加空记录。在执行这个带有NULL关键字的指令时,出现了错误 "NOT NULL约束失败:test.Name"。这意味着由于NOT NULL约束的限制,我们不能将NULL作为列 "Name "的一个值。

让我们看一下另一个例子。所以,我们通过CREATE TABLE指令创建了一个新的表Actor,有三个列ID,Name和Age。这些列中没有一个包含NOT NULL约束。
>> CREATE TABLEActor(IDINT PRIMARY KEY,Name TEXT,AgeINT)。

现在,根据下面的SELECT "*"指令,表Actor是空的。
>> SELECT \* FROMActor;

我们必须先用INSERT INTO指令将一些记录放入表 "Actor"。因此,我们为所有三列添加了5条记录。ID、姓名和年龄。
>> INSERT INTOActor(ID,Name,Age) VALUES (1, "Julia", 49), (2, "Angelina", 49),
(3, "Leonardo", 50), (4, "Tom", 55) 。

我们尝试用SELECT指令来获取 "演员 "表的所有新增加的记录。在我们的屏幕上总共显示了5条记录,没有空值。
>> SELECT \* FROMActor;

让我们使用INSERT INTO指令在 "演员 "表中添加一条包含NULL值的新记录。所以,我们对所有的3个列都尝试了这个指令,并为列 "Age "添加了一个NULL值。这条记录已经成功插入到表中,并且没有出现任何错误,因为我们没有为 "演员 "表的任何列设置任何NOT NULL约束。对表 "演员 "使用SELECT指令,显示了所有前5条添加的记录和第6条记录,其列 "年龄 "为NULL值。
>> INSERT INTOActor(ID,Name,Age) VALUES (1, "Ema Watson", NULL)
<blockquote>>SELECT \* FROMActor;

结论
所以,这是关于对SQLite表的特定列使用NOT NULL约束。我们已经演示了数据库对不把数值放在有NOT NULL约束的列内的反应,以及我们如何使用NULL值与列的数值。