SQLite支持ALTER TABLE的一个变种。使用SQLite的ALTER TABLE语句可以修改一个已经存在的表,重新命名一个字段,在其中插入一个字段,或者从其中删除一个字段。通过RENAME COLUMN命令,表的列名被重新命名为新的名称。我们只能用这个操作来修改同一数据集中的表。而如果表的变化包括了触发器或索引,这些就会在变化后被保留下来。因此,我们决定在本指南中介绍重命名SQLite表的列这一主题。
本文首先在Ubuntu 20.04系统中启动shell应用程序。使用Ctrl+Alt+T,我们已经打开了它,并开始用apt update指令更新我们的系统。在添加了当前登录用户的密码后,更新过程已经开始并完成。

在更新系统后,我们必须确保我们的系统和它的内部包都升级到最新的版本。所以,我们一直在使用apt upgrade指令来升级其软件包,如下图所示。

在成功地更新和升级了我们的系统之后,我们将朝着在终端外壳内启动SQLite数据库的方向发展。你必须利用单一的关键词 "sqlite3 "来启动它。SQLite shell将在我们的屏幕上启动,我们可以用它来查询数据。

打开它后,我们用".tables "指令列出了数据库的表,发现到目前为止数据库中还没有表。

要重命名一个列,我们必须在数据库中有一个表。因此,我们在当前的SQLite数据库中用CREATE TABLE指令制作了一个名为 "Test "的表。在这个表中,我们将有两列ID和Name。ID列将包含一个整数类型的值,代表表的主键,不能为空。Name列将是Text类型的,也不能是NULL。现在,根据".tables "指令,我们在表的列表内有一个 "test "表。选择测试表的记录,我们发现它是空的,需要在其中插入一些记录。

因此,我们使用INSERT INTO指令,在表 "Test "的ID和Name列中插入了5条记录,使用VALUES关键字,后面跟要插入的记录。这五条记录是唯一的,没有重复的值。插入记录后,我们在SELECT指令的帮助下对表的记录进行检查,SELECT指令后面是星号 "*"字符和表名 "Test"。这个查询返回该表的ID和Name列的所有5条记录,并以"|"字符分开。

我们的列名是Test表的 "ID "和 "Name"。让我们使用RENAME COLUMN指令开始重命名列名。我们将使用ALTER TABLE指令将列 "Name "重命名为 "Fname",后面加上表名 "Test "和使用 "TO "关键字的 "RENAME COLUMN"。查询成功了,如下图所示。
sqlite>ALTER TABLETestRENAME COLUMNNameTOFname。

在改变了表 "Test "的列名后,我们将使用SELECT指令来显示该表的所有记录。一共显示了5条记录,如下图所示。
sqlite\> SELECT \* FROMTest;

让我们看看更新一个新的名字是否有效。让我们在Test表内插入记录,使用Test表的列的原始名称。因此,我们尝试用 "ID "和 "Name "列的原始名称插入INSERT INTO指令,后面是VALUES关键字和第6条记录,即(6,"Barak")。执行该指令会返回一个错误 "表test没有名为 "Name "的列。这个错误的发生是由于使用了原来的列名 "Name "而不是新的列名 "Fname"。
让我们通过在终端使用INSERT INTO指令,用新的列名 "Fname "而不是原来的列名 "Name "插入相同的记录。这一次,我们在执行这个插入指令后没有出现任何错误。我们使用SELECT指令和星号 "*"字符来显示Test表的所有记录。一共显示了6条记录,也就是说,最后一条记录是最新插入的记录,新的列名是 "Fname"。

就像INSERT指令一样,我们也可以利用SELECT指令来获取表的记录,并利用其中的列名来显示新的名称已经成功添加到表的列中。因此,我们一直在利用SELECT指令来显示测试表的记录,同时添加指定的WHERE子句条件。为此,我们使用了原始列的名称 "Name",只显示Name列的值为 "Ana "的表的记录。执行这个查询显示了一个错误,"没有这样的列。Name"。这个错误的原因是新更新的列的名称为 "Fname"。让我们用新的列名 "Fname "运行同样的查询,获取所有 "Fname "列包含 "Ana "值的记录。它从表中显示了一条记录,并删除了错误。
sqlite>SELECT \* FROMActorWHEREName\= "Ana";
sqlite>SELECT \* FROMActorWHEREFName\= "Ana";

总结
这篇文章讨论了在ALTER TABLE指令中使用RENAME COLUMN子句来更新或修改表中的特定列的名称。这个例子也可以修改。到目前为止,我们已经用最简单的方式完成了,希望你喜欢。