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) );

【SQL中的ALTER TABLE语句简介】让我们也向该表中插入一些记录-
  • 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语句简介

文章图片
现在, 你已经在PostgreSQL中建立了一个表。现在让我们在下一部分中看到Alter Table的不同应用程序。
在PostgreSQL中执行不同的ALTER TABLE语句
在本节中, 你将以上述两种方式查看Alter Table语句的用法-
  • 添加, 修改和删除列
  • 添加和删??除约束
添加, 修改或删除列 让我们从表中再增加一列Student_grade(类型字符)-
ALTER TABLE student_details ADD student_grade VARCHAR(5);

现在, 该表应如下所示-
SQL中的ALTER TABLE语句简介

文章图片
请注意, 对于你输入的条目, 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语句简介

文章图片
你还可以重命名列。让我们看看如何-
ALTER TABLE student_details RENAME student_id TO student_roll;

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

文章图片
现在, 让我们看看如何从表中删除列-
ALTER TABLE student_details DROP COLUMN student_year;

该查询将删除Student_year列, 执行查询的表应类似于-
SQL中的ALTER TABLE语句简介

文章图片
请注意, 如果其他表引用了你要删除的列, 则可能会出现参照完整性违规错误。
现在, 你将看到如何在表中添加和删除约束。
添加和删??除约束。
表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语句简介

文章图片
删除约束也类似。你需要指定要删除的约束的名称。让我们删除你命名为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语句简介

文章图片
你也可以使用其他检查约束。
这就是本教程的全部内容!
本教程向你介绍了Alter Table语句, 以有效地修改表的架构。如果你想提高SQL技能, 则可能有兴趣参加srcmini提供的以下课程-
  • 在SQL中联接数据
  • 用于探索性数据分析的SQL
  • 中级SQL

    推荐阅读