修改表语法规范:
ALTER TABLE T_NAME ADD/MODIFY/DROP [COLUMN......]
- 添加新列;
- 修改现有列;
- 为新列定义默认值;
- 删除列。
预备表
create table students
(
id number(6) not null,
name varchar2(30),
gender char(1),
birthday varchar2(10)
);
添加新列
-- 给students表添加年级grade和班级class两个字段
alter table students add (grade number(6) not null);
alter table students add (class number(6) not null);
-- 或者
alter table students add
(
grade number(6) not null,
class number(6) not null
);
注意:当表已有数据的时候,添加的新字段不能指定为not null;但如果新增字段指定了默认值,则可以指定为not null 。
修改列
-- 将性别一列修改为varchar2(3)
alter table students modify (gender varchar2(3));
删除列
-- 删除一个列
alter table students drop column age;
-- 删除多个列
alter table students drop (school, age);
删除列的时候注意以下几点:
- 要删除的列可以包含数据,也可以是null。
- 使用alter table删除列时,每次尽力删除一个列;
- 表在更改之后,必须至少还剩下一个列;
- 列一旦被删除,就不能恢复。
SET UNUSED
可以使用SET UNUSED选项将一个或多个列标记为不可用。
alter table students set unused (grade, class);
-- 或者
alter table students set unused column grade;
alter table students set unused column class;
可以使用DROP UNUSED COLUMNS删除被标记为不可用的列。
alter table students drop unused columns;
set unused列之后,并不是将该列数据立即删除,而是被隐藏起来,物理上还是存在的。
如果表数据量很大,drop一个列就会占用很长时间和资源。set unused的作用就是为了在cpu、内存等资源不充足的时候,先做上unused标记,再等数据库资源空闲的时候用drop set unused删除。
更改表名
alter table students rename to stu;
给表添加备注
comment on table students is 'information of students';
给列添加备注
comment on column students.birthday is '出生年月';
删除表
DDL(数据库定义语言)方法删除表的内容:
truncate table students;
truncate table这种删除又被称之为截断。 在功能上与不带 WHERE 子句的 DELETE 语句相同。
drop table students;
drop table这种删除不是把表真正的删除了,而是把表改个名放到了回收站里 user_recyclebin。可以从回收站里恢复这张表。
flashback table students to before drop [rename to XXX];
如果该表的名称已经被其他表使用,那么执行flashback table 恢复该表时则会报错,此时就应该利用起重命名。
purge可以将表彻底清除,并且释放表所占用的空间。
drop table students; -- 删除表students
purge table students; -- 清除回收站里的students表,并释放空间
-- 或
drop table students purge; -- 直接删除students表,不进回收站