个性化阅读
专注于IT技术分析

SQL中的ALTER TABLE语句简介

点击下载

在SQL中, 主要有三种类型的命令-

  • DDL-代表数据定义语言, 它包含用于定义数据库的SQL命令, 其中包括创建表, 提供规范, 修改表等。 DDL的示例包括CREATE, DROP, ALTER等。由于发出DDL命令而引起的更改无法回滚。
  • DML-代表数据操作语言, 可让你运行选择, 插入, 更新和删除查询。可以回退由发出DML命令引起的更改。示例-SELECT, INSERT, UPDATE和DELETE。
  • DCL-代表数据控制语言, 它使你可以指定数据库系统的权限, 权限和其他控件。

在本教程中, 你将看到ALTER TABLE语句的用法, 该语句本质上是DDL。本教程将涵盖以下内容-

  • 需要ALTER TABLE语句
  • 在PostgreSQL数据库中创建表
  • 在PostgreSQL中执行不同的ALTER TABLE语句

注意:本教程不会讲授如何创建表, 在表中插入数据, 在PostgreSQL中从表中选择数据。如果你想对这些主题进行复习, 可以查看本文。

需要ALTER TABLE语句

数据库的规格可能会随时间变化。例如, 你可能需要在特定表中添加一列, 或者可能需要在表中添加另一个主键。你可能还需要更改表中特定列的数据类型。你可能无法删除表并从头开始创建它。 Alter Table语句使你可以非常无缝地完成所有这些操作。使用Alter Table, 你可以-

  • 添加, 修改或删除列
  • 添加或删除约束

你也可以启用/禁用约束, 但这不在本教程的范围之内。

在本教程中, 你将看到上述每个用例, 但是在这样做之前, 你需要在PostgreSQL中有一个表, 以便你可以开始使用。在下一节中, 你将创建一个简单的表。

在PostgreSQL数据库中创建表

你将在PostgreSQL中(使用pgAdmin实用程序)使用以下列和数据类型创建一个名为Student_details的表-

  • student_id(整数)
  • student_full_name(字符)
  • student_year(整数)

你将从此表开始, 该表仅包含三列。稍后, 当你继续学习本教程时, 你将在此表中添加更多列, 并将以不同的方式更改该表。以下创建查询将为你提供根据上述规范创建的表-

CREATE TABLE student_details(
 student_id SERIAL, student_full_name VARCHAR (50), student_year VARCHAR (100)
);

让我们也向该表中插入一些记录-

  • INSERT INTO student_details(student_full_name, student_year)VALUES(‘John Doe’, ‘1st’);
  • INSERT INTO student_details(student_full_name, student_year)VALUES(‘Chris Villa’, ‘3rd’);

由于student_id的数据类型设置为SERIAL, PostgreSQL会自动增加列值, 并且PostgreSQL默认将数据类型解释为整数。

该表格student_details应该看起来像这样-

SQL中的ALTER TABLE语句简介1

现在, 你已经在PostgreSQL中建立了一个表。现在让我们在下一部分中看到Alter Table的不同应用程序。

在PostgreSQL中执行不同的ALTER TABLE语句

在本节中, 你将以上述两种方式查看Alter Table语句的用法-

  • 添加, 修改和删除列
  • 添加和删​​除约束

添加, 修改或删除列

让我们从表中再增加一列Student_grade(类型字符)-

ALTER TABLE student_details ADD student_grade VARCHAR(5);

现在, 该表应如下所示-

SQL中的ALTER TABLE语句简介2

请注意, 对于你输入的条目, student_grade列的值为null。这是大多数RDBMS隐式完成的。但是, 你始终会触发更新查询以更新值。现在让我们看看如何使用Alter Table修改列。你将student_year列的最大允许大小从100更改为10, 因为仅分配三个字符(student_year可以是第1个, 第2个或第3个)的空间就太大了。

ALTER TABLE student_details ALTER COLUMN student_year TYPE VARCHAR(10);

你可以在下图中看到结果-

SQL中的ALTER TABLE语句简介3

你还可以重命名列。让我们看看如何-

ALTER TABLE student_details RENAME student_id TO student_roll;

上面的查询将student_id列重命名为student_roll。你还可以使用选择查询来验证这一点, 结果应类似于下图-

SQL中的ALTER TABLE语句简介4

现在, 让我们看看如何从表中删除列-

ALTER TABLE student_details DROP COLUMN student_year;

该查询将删除Student_year列, 执行查询的表应类似于-

SQL中的ALTER TABLE语句简介5

请注意, 如果其他表引用了你要删除的列, 则可能会出现参照完整性违规错误。

现在, 你将看到如何在表中添加和删除约束。

添加和删​​除约束。

表student_details没有主键。主键是非空约束和唯一约束的组合。让我们指定一列” student_roll”(从” student_id”更新)作为” student_details”的主键-

ALTER TABLE student_details ADD PRIMARY KEY (student_roll);

你还可以添加其他约束, 例如, 可以将检查约束添加到student_grade列, 以便其值始终为A, B或C。

ALTER TABLE student_details ADD CONSTRAINT year_check CHECK (student_grade IN ('A', 'B', 'C'));

year_check是要添加到表中的约束的占位符。现在, 如果你尝试将以下条目插入表中, 应该会得到一个错误-

INSERT INTO student_details(student_full_name, student_grade) VALUES('David Lune', '3rd');

该错误如下所示-

SQL中的ALTER TABLE语句简介6

删除约束也类似。你需要指定要删除的约束的名称。让我们删除你命名为year_check的约束-

ALTER TABLE student_details DROP CONSTRAINT year_check;

让我们验证一下。如果实际删除了约束year_check, 则此查询INSERT INTO student_details(student_full_name, student_grade)VALUES(‘David Lune’, ‘3rd’);不应引起任何错误。该表现在包含记录-

SQL中的ALTER TABLE语句简介7

你也可以使用其他检查约束。

这就是本教程的全部内容!

本教程向你介绍了Alter Table语句, 以有效地修改表的架构。如果你想提高SQL技能, 则可能有兴趣参加srcmini提供的以下课程-

  • 在SQL中联接数据
  • 用于探索性数据分析的SQL
  • 中级SQL
赞(0)
未经允许不得转载:srcmini » SQL中的ALTER TABLE语句简介

评论 抢沙发

评论前必须登录!