原文: Alter Table in SQL – How to Add a Column or Rename a Column in SQL

你已经创建了你的数据库和表,在所有这些工作之后,你注意到你需要添加或重命名一个列。那么,你可以使用 “ALTER TABLE” 语句来这样做。

请记住,当你这样做时,你需要非常小心。如果你的表有很多行,它可能会给你的数据库带来性能问题。

注意:如果这里介绍的语法不起作用,请检查你所使用的 SQL 的实现文档。大多数东西的工作原理都是一样的,但也有一些区别。

如何用 ALTER TABLE 添加一个新列

要添加一个新的列,首先需要用 ALTER TABLE table_name 选择表,然后用 ADD column_name datatype 写下新列的名称和数据类型。综合起来,代码看起来是这样的:

ALTER TABLE table_name
ADD column_name datatype;

使用 ALTER TABLE 添加新列的示例

我们有一个用户数据库,内容如下:

ID NAME AGE STATE EMAIL
1 Paul 24 Michigan paul@example.com
2 Molly 22 New Jersey molly@example.com
3 Robert 19 New York robert@example.com

我们已经到了需要存储用户的身份证件号码的时候了,所以我们需要为此添加一个新的列。

为了给我们的 users 表添加一个新的列,我们需要用 ALTER TABLE users 选择该表,然后用 ADD id_number TEXT 指定新列的名称和数据类型,如下:

ALTER TABLE users
ADD id_number TEXT;

表格现在有了新的一列:

ID NAME AGE STATE EMAIL ID_NUMBER
1 Paul 24 Michigan paul@example.com NULL
2 Molly 22 New Jersey molly@example.com NULL
3 Robert 19 New York robert@example.com NULL

一旦提供了缺失的信息,你将需要使用 UPDATE 语句为已经存在的用户添加这些信息。

如何用默认值而不是 NULL 创建一个新的列

你也可以使用 default 关键字和要使用的值来创建一个带有默认值的列。然后,用户将看到默认值,而不是用 NULL 来填充缺失的值。

比方说,我们很快就会有国际用户,我们想添加一个 country 列。我们所有的现有用户都来自美国,所以我们可以用它作为默认值。

ALTER TABLE users
ADD country TEXT default "United States";

现在这个表格是这样的:

ID NAME AGE STATE EMAIL ID_NUMBER COUNTRY
1 Paul 24 Michigan paul@example.com NULL United States
2 Molly 22 New Jersey molly@example.com NULL United States
3 Robert 19 New York robert@example.com NULL United States

向表格添加新列时要谨慎

如果你的表已经有很多行了--比如你已经有很多用户,或者很多存储的数据--添加一个新的列可能真的很耗资源。所以一定要小心处理这个操作。

如何用 ALTER TABLE 重命名一个列

你可以用下面的代码来重命名一个列。你用 ALTER TABLE table table_name 选择表格,然后用 RENAME COLUMN old_name TO new_name 写出要重命名的列和要重命名的内容。

ALTER TABLE table_name
RENAME COLUMN old_name TO new_name;

重命名一个列的例子

让我们看一下我们在前面的例子中使用的同一个表:

ID NAME AGE STATE EMAIL ID_NUMBER COUNTRY
1 Paul 24 Michigan paul@example.com NULL United States
2 Molly 22 New Jersey molly@example.com NULL United States
3 Robert 19 New York robert@example.com NULL United States

为了避免 idid_number 列之间的混淆,让我们把第一个列重命名为 user_id

我们首先用 ALTER TABLE users 选择表,然后用 RENAME COLUMN id TO user_id 声明列名,使其变为我们需要的名字。

ALTER TABLE users
RENAME COLUMN id TO user_id;

使用查询后,表格将看起来像这样:

USER_ID NAME AGE STATE EMAIL ID_NUMBER COUNTRY
1 Paul 24 Michigan paul@example.com NULL United States
2 Molly 22 New Jersey molly@example.com NULL United States
3 Robert 19 New York robert@example.com NULL United States

重命名表中的列时要小心

当你使用 ALTER TABLE 重命名列时,你有可能破坏数据库的依赖关系。

如果你使用数据库重构工具来改变一个列的名称,而不是使用 ALTER TABLE,它将管理所有的依赖关系,并用新的列名来更新它们。

如果你的数据库比较小,你可能不需要担心,但必须记住这一点。

总结

在这篇文章中,你已经学会了如何使用 ALTER TABLE 在表中增加一个列和重命名一个列。

请记住,这两种操作都有各自的风险。正如有人说的,“权力越大,责任越大”ALTER TABLE 是一种大的权力,所以你要小心使用它!