在本教程中,我们将学习如何使用oracle alter table
语句来修改表结构。
要修改现有表的结构,请使用alter table
语句。 以下说明语法:
alter table table_name action;
在上面的语句中,
alter table
语句可用来:
下面来看看一些例子来了解每个操作的工作原理。
我们将使用在上一个教程中创建的persons
表进行演示。
-- 12c语法
create table persons(
person_id number generated by default as identity,
first_name varchar2(50) not null,
last_name varchar2(50) not null,
primary key(person_id)
);
要将新列添加到表中,请使用以下语法:
alter table table_name
add column_name type constraint;
例如,以下语句将一个名为birthdate
的新列添加到persons
表中:
alter table persons
add birthdate date not null;
如果查看persons
表格,会看到birthdate
日期列被添加到列列表的末尾:
desc persons;
name null type
---------- -------- ------------
person_id not null number
first_name not null varchar2(50)
last_name not null varchar2(50)
birthdate not null date
要同时向表中添加多列,请按如下所示将新列置于括号内:
alter table table_name
add (
column_name type constraint,
column_name type constraint,
...
);
看下面的例子:
alter table persons
add (
phone varchar(20),
email varchar(100)
);
在这个例子中,语句在users
表中添加了两个名为phone
和email
的新列。
desc persons
name null type
---------- -------- -------------
person_id not null number
first_name not null varchar2(50)
last_name not null varchar2(50)
birthdate not null date
phone varchar2(20)
email varchar2(100)
要修改列的属性,请使用以下语法:
alter table table_name
modify column_name type constraint;
例如,下面的语句将birthdate
列更改为一个空列:
alter table persons modify birthdate date null;
我们再次验证persons
表结构:
desc persons
name null type
---------- -------- -------------
person_id not null number
first_name not null varchar2(50)
last_name not null varchar2(50)
birthdate date
phone varchar2(20)
email varchar2(100)
正如所看到的,birthdate
日期变得无能为力。
要修改多个列,请使用以下语法:
alter table table_name
modify ( column_1 type constraint,
column_1 type constraint,
...);
例如,以下语句将phone
和email
列更改为not null
列,并将email
列的长度扩展为255
个字符:
alter table persons modify(
phone varchar2(20) not null,
email varchar2(255) not null
);
再次验证persons
表结构:
desc persons;
name null type
---------- -------- -------------
person_id not null number
first_name not null varchar2(50)
last_name not null varchar2(50)
birthdate date
phone not null varchar2(20)
email not null varchar2(255)
要从表中删除现有的列,请使用以下语法:
alter table table_name
drop column column_name;
该语句从表结构中删除列,并删除存储在该列中的数据。以下示例从persons
表中删除birthdate
日期类型的列:
alter table persons
drop
column birthdate;
再次查看persons
表结构,就会发现birthdate
列已被删除:
desc persons;
name null type
---------- -------- -------------
person_id not null number
first_name not null varchar2(50)
last_name not null varchar2(50)
phone not null varchar2(20)
email not null varchar2(255)
要同时删除多个列,请使用以下语法:
alter table table_name
drop (column_1,column_2,...);
例如,以下语句从个人表中删除phone
和email
列:
alter table persons
drop
( email, phone );
我们再来看一下persons
表:
desc persons;
name null type
---------- -------- ------------
person_id not null number
first_name not null varchar2(50)
last_name not null varchar2(50)
email
和phone
列已按预期删除。
从版本9i开始,oracle添加了一个用于重命名列的子句,如下所示:
alter table table_name
rename column column_name to new_name;
例如,以下语句将first_name
列重命名为forename
列:
alter table persons
rename column first_name to forename;
以下语句检查结果:
desc persons;
name null type
--------- -------- ------------
person_id not null number
forename not null varchar2(50)
last_name not null varchar2(50)
要将一个表重命名为一个新的name
的表名,使用下面的语法:
alter table table_name
rename to new_table_name;
例如,下面的语句将users
表重命名为people
表:
alter table persons rename to people;
在本教程中,您已学习如何使用oracle alter table
语句来更改现有表的结构。