sql中alter table语句语法

346 阅读5分钟

SQL ALTER TABLE

SQL ALTER TABLE简介

标准查询语言(SQL)中的ALTER TABLE命令用于添加、删除或修改现有数据表中的列,通过重新命名它们或改变它们的数据类型。它还用于添加或删除现有列上的约束,如UNIQUE, NOT NULL, PRIMARY KEY, CHECK等。ALTER是一个数据定义语言(DDL)命令,与数据表中的记录无关。它只关注表结构的修改。

首先,让我们学习一下在SQL中编写ALTER TABLE语句时使用的语法。

语法和参数

下面是一些用于编写ALTER TABLE命令的简化语法。

(i) 添加一个新列

ALTER TABLE table_name ADD column_name datatype;

(ii) 删除一个现有的列

ALTER TABLE table_name DROP column_name;

(iii) 重命名一个现有的列

ALTER TABLE table_name RENAME column_name_old TO column_name_new;

(iv) 改变一个现有列的数据类型

ALTER TABLE table_name ALTER COLUMN column_name TYPE new_data_type;

(v) 在一个现有的列上添加一个约束条件

ALTER TABLE table_name ADD CONSTRAINT constraint_name constraint_condition;

(v) 放弃一个现有的约束条件

ALTER TABLE table_name DROP CONSTRAINT constraint_name ;

在上述语法中使用的参数如下。

**table_name:**正在执行ALTER语句的表

**column_name:**被添加、删除或修改的列

**constraint_name:**需要添加或删除的约束的名称

**constraint_condition。**对正在创建的约束的描述

SQL ALTER TABLE的例子

为了说明在SQL中使用ALTER TABLE语句,让我们创建一个名为 "学生 "的虚拟表。然后,我们可以使用下面的代码片断来执行上述任务。

CREATE TABLE students (
roll_no int NOT NULL PRIMARY KEY,
student_name VARCHAR(255),
degree_major VARCHAR(255) NOT NULL,
degree_year VARCHAR(255),
society VARCHAR(255)
);

创建了学生表后,让我们在表中插入几条记录。

INSERT INTO students(
roll_no, student_name, degree_major, degree_year, society)
VALUES (1,'Mohith K','Computer Science Engineering','IV','Dramatics'),
(2,'Ayesha Khan','Electrical Engineering','I','Music'),
(3,'Kylie Green','Computer Science Engineering','III','Choreography'),
(4,'Alisha Rojer','Chemical Engineering','III','Music'),
(5,'Andy Bernard','Geosciences','IV','Dramatics');
select * from students;

SQL ALTER TABLE output 1

现在,我们准备在学生表的帮助下尝试几个基于ALTER语句的例子。

例子#1 - 在现有的表中增加一个新的列

在学生表中添加一个数据类型为VARCHAR(255)的新列 "contact"。

ALTER TABLE students   ADD COLUMN contact VARCHAR(255);

该命令已成功执行。让我们在SELECT语句的帮助下检查一下表是否已经发生了变化。

SELECT * FROM students;

SQL ALTER TABLE output 2

上图中突出显示的列是新添加的 "contact "列。

例2--删除一个现有的列

从学生表中删除 "contact "列。

假设新创建的列 "contact "在学生表中不再需要了。那么,我们可以使用ALTER命令删除它。

ALTER TABLE students
DROP COLUMN contact;

让我们看看联系人列是否被删除。

SELECT * FROM students;

SQL ALTER TABLE output 3

可以看出,上述列已经被成功删除。

例3 - 重命名一个现有的列

将学生表中的 "roll_no "列重命名为 "student_id"。

ALTER TABLE students
RENAME COLUMN roll_no to student_id;
SELECT * FROM students;

SQL ALTER TABLE output 4

学生表中的 "roll_no "列已经成功重命名为 "student_id"。

例子#4 - 改变一个现有列的数据类型

将 "student_id "列的数据类型从INT改为VARCHAR(50)。

ALTER TABLE students
ALTER COLUMN student_id TYPE VARCHAR(50);

student_id列的数据类型已经成功地改变为VARCHAR或字符变化。从下面的图片中可以看出。

SELECT * FROM students;

SQL ALTER TABLE output 5

例子#5 - 在一个现有的列上添加NOT NULL约束

在学生表中的 "degree_year "列上添加一个NOT NULL约束。

ALTER TABLE students
ALTER COLUMN degree_year SET NOT NULL;
select * from students;

SQL ALTER TABLE output 6

NOT NULL约束已经成功地添加到 "degree_year "列中。下面是几条INSERT语句来进一步说明。

INSERT INTO students(
student_id, student_name, degree_major, degree_year, society)
VALUES (6,'Ron Weasley','chemistry',NULL,'Music');

SQL ALTER TABLE output 7

在这个插入查询中,我们试图在degree_year列中插入一个NULL值。它给出了一个错误。请仔细阅读错误信息。

现在让我们试试另一个没有任何NULL值的查询。

INSERT INTO students(
student_id, student_name, degree_major, degree_year, society)
VALUES (6,'Ron Weasley','chemistry','II','Music');

看,这个被成功执行了。在SELECT语句的帮助下,可以看到学生表中的新行。

SELECT * FROM students;

SQL ALTER TABLE output 8

例子 #6 - 移除现有列上的NOT NULL约束

在学生表的 "degree_year "列上删除NOT NULL约束条件。

ALTER TABLE students
ALTER COLUMN degree_year DROP NOT NULL;
select * from students;

该查询成功返回,并显示输出如下。

output 9

让我们为 "degree_year "列插入一条带有NULL值的新记录。

INSERT INTO students(
student_id, student_name, degree_major, degree_year, society)
VALUES (7,'Ross Geller','Paleontology',NULL,'Dramatics');

与前面的例子不同,INSERT查询的完成没有任何错误。

SELECT * FROM students;

output 10

请看第7行;degree_year的值是NULL。

例子 #7 - 在一个现有的列上添加CHECK约束

在学生表中的 "degree_year "列上添加一个CHECK约束,使其只能容纳(I, II, III, IV, V)中的值。

ALTER TABLE students
ADD CONSTRAINT year_check CHECK(degree_year IN ('I','II','III','IV','V'));
select * from students;

output 11

该约束已被成功添加。让我们用degree_year写一个INSERT查询,它不满足CHECK约束。

INSERT INTO students(
student_id, student_name, degree_major, degree_year, society)
VALUES (8,'Harvey Ross','Chemistry','VI','Music');

output 12

正如预测的那样,服务器抛出了一个错误。仔细阅读这个错误。

现在试试另一个INSERT查询,从上述集合中的学位_年份。

INSERT INTO students(
student_id, student_name, degree_major, degree_year, society)
VALUES (8,'Harvey Ross','Chemistry','III','Music');

output 13

这个查询被成功执行;因此,检查约束已经被成功应用。

例子#8 - 删除现有列上的PRIMARY KEY约束

删除学生表中 "student_id "列的PRIMARY KEY约束。

ALTER TABLE students
DROP CONSTRAINT students_pkey;

students_pkey约束是在CREATE TABLE语句中创建的。现在它已被成功删除。在学生表的约束下,它不再被提及。

output 14

例子#9 - 在现有列上添加PRIMARY KEY约束

在学生表中的 "student_id "和 "student_name "列上添加PRIMARY KEY约束。

ALTER TABLE students
ADD CONSTRAINT students_pk PRIMARY KEY(student_id, student_name);

该查询成功返回。在约束标题下可以看到新创建的约束 "students_pk"。

output 15

总结

SQL中的ALTER TABLE命令用于添加、删除、重命名和修改现有的表及其列。当我们想改变一个现有表的结构而不需要创建一个新的表时,它就变得非常有用。