在SQL中, 主要有三种类型的命令-
- DDL-代表数据定义语言, 它包含用于定义数据库的SQL命令, 其中包括创建表, 提供规范, 修改表等。 DDL的示例包括CREATE, DROP, ALTER等。由于发出DDL命令而引起的更改无法回滚。
- DML-代表数据操作语言, 可让你运行选择, 插入, 更新和删除查询。可以回退由发出DML命令引起的更改。示例-SELECT, INSERT, UPDATE和DELETE。
- DCL-代表数据控制语言, 它使你可以指定数据库系统的权限, 权限和其他控件。
- 需要ALTER TABLE语句
- 在PostgreSQL数据库中创建表
- 在PostgreSQL中执行不同的ALTER TABLE语句
需要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_details应该看起来像这样-
文章图片
现在, 你已经在PostgreSQL中建立了一个表。现在让我们在下一部分中看到Alter Table的不同应用程序。
在PostgreSQL中执行不同的ALTER TABLE语句
在本节中, 你将以上述两种方式查看Alter Table语句的用法-
- 添加, 修改和删除列
- 添加和删??除约束
ALTER TABLE student_details ADD student_grade VARCHAR(5);
现在, 该表应如下所示-
文章图片
请注意, 对于你输入的条目, 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);
你可以在下图中看到结果-
文章图片
你还可以重命名列。让我们看看如何-
ALTER TABLE student_details RENAME student_id TO student_roll;
上面的查询将student_id列重命名为student_roll。你还可以使用选择查询来验证这一点, 结果应类似于下图-
文章图片
现在, 让我们看看如何从表中删除列-
ALTER TABLE student_details DROP COLUMN student_year;
该查询将删除Student_year列, 执行查询的表应类似于-
文章图片
请注意, 如果其他表引用了你要删除的列, 则可能会出现参照完整性违规错误。
现在, 你将看到如何在表中添加和删除约束。
添加和删??除约束。
表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');
该错误如下所示-
文章图片
删除约束也类似。你需要指定要删除的约束的名称。让我们删除你命名为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’ ); 不应引起任何错误。该表现在包含记录-
文章图片
你也可以使用其他检查约束。
这就是本教程的全部内容!
本教程向你介绍了Alter Table语句, 以有效地修改表的架构。如果你想提高SQL技能, 则可能有兴趣参加srcmini提供的以下课程-
- 在SQL中联接数据
- 用于探索性数据分析的SQL
- 中级SQL
推荐阅读
- 多重继承和super()简介
- 如何使用ggplot2制作直方图
- appium环境
- create-react-app里添加less
- android开发(列表listview的实现 | 下拉刷新)
- Android中适配器的notifyDataSetChanged()为何有时不刷新
- Vant Weapp小程序蹲坑之使用submit-bar组件
- visual studio 2017 中默认无法开发 Android 8.0 及以上系统的解决方案
- Office Web Apps 2013 修改Excel在线查看文件大小限制