【OracleDB】 09 创建和管理表
Oracle常见的数据库对象
- 表 基本的数据存储集合,行与列组成
- 视图 抽取的逻辑集合
- 序列 提供规律性的数值
- 索引 提高查询效率
- 同义词 对象别名
TABLE 表
用户定义的表:
- 用户自己创建
- 包含了用户所需的信息
SELECT * FROM user_tables;
数据字典:
- 由 Oracle Server 自动创建的一组表
- 包含数据库信息
查询数据字典
查看用户定义的表
SELECT table_name FROM user_tables ;
查看用户定义的各种数据库对象
SELECT DISTINCT object_type FROM user_objects ;
查看用户定义的表, 视图, 同义词和序列
SELECT * FROM user_catalog ;
命名规则:
表名和列名:
- 必须以字母开头
- 必须在 1–30 个字符之间
- 必须只能包含 A–Z, a–z, 0–9, _, $, 和 #
- 必须不能和用户定义的其他对象重名
- 必须不能是Oracle 的保留字
CREATE TABLE 语句
前置条件:
- CREATE TABLE权限
- 存储空间
语法格式:
CREATE TABLE [schema.]table (column datatype [DEFAULT expr][, ...]);
声明要求:
【必须指定: 表名、列名、数据类型、尺寸】
创建案例:
CREATE TABLE dept( deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13) );
查看表的结构
DESCRIBE dept
使用子查询创建表
使用 AS subquery 选项,将创建表和插入数据结合起来
指定的列和子查询中的列要一一对应
通过列名和默认值定义列
CREATE TABLE table [(column, column...)] AS subquery;
复制现有的表:
create table emp1 as select * from employees; create table emp2 as select * from employees where 1=2; -- 创建的emp2是空表。
案例:
CREATE TABLE dept80 AS SELECT employee_id, last_name, salary*12 ANNSAL, hire_date FROM employees WHERE department_id = 80;
ALTER TABLE 语句
使用 ALTER TABLE 语句可以:
- 追加新的列
- 修改现有的列
- 为新追加的列定义默认值
- 删除一个列
- 重命名表的一个列名
使用 ALTER TABLE 语句追加, 修改, 或删除列的语法.
语法公式:
ADD添加
ALTER TABLE table ADD (column datatype [DEFAULT expr] [, column datatype]...);
MODIFY修改
ALTER TABLE table MODIFY (column datatype [DEFAULT expr] [, column datatype]...);
DROP删除
ALTER TABLE table DROP COLUMN column_name;
RENAME重命名
ALTER TABLE table_name RENAME COLUMM old_column_name TO new_column_name
案例:
新列是表中的最后一列
ALTER TABLE dept80 ADD (job_id VARCHAR2(9)); Table altered.
修改列的数据类型, 尺寸和默认值
ALTER TABLE dept80 MODIFY (last_name VARCHAR2(30)); Table altered.
对默认值的修改只影响今后对表的修改【即不影响原有的记录】
ALTER TABLE dept80 MODIFY (salary number(9,2) default 1000); Table altered.
DROP COLUMN 子句删除不再需要的列.
ALTER TABLE dept80 DROP COLUMN job_id; Table altered.
表的删除和清空
删除表
- 数据和结构都被删除
- 所有正在运行的相关事务被提交
- 所有相关索引被删除
- DROP TABLE 语句不能回滚
DROP TABLE dept80;
清空表
- 删除表中所有的数据
- 释放表的存储空间
- TRUNCATE语句不能回滚
【可以使用 DELETE 语句删除数据,可以回滚】
delete from emp2; select * from emp2; rollback; select * from emp2;
改变对象的名称
执行RENAME语句改变表, 视图, 序列, 或同义词的名称
RENAME dept TO detail_dept;
【必须是对象的拥有者才能改变】
CRAETE TABLE
TRUNCATE TABLE
ALTER TABLE
REANME...TO
DROP TABLE
上述操作完以后,自动commit;
所以,rollback对其操作,没有效果
创建表
直接创建
create table emp1( name varchar2(20), salary number(8,2)default 1000, id number(4), hire_date date );
子查询创建
create table emp2 as select last_name name,employee_id id,hire_date from employees;
子查询创建2
create table emp2 as select last_name name,employee_id id,hire_date from employees where department_id = 80;/where 1=2;
修改表
1)增加新的列
alter table emp1 add(birthday date)
2)修改现有的列
alter table emp1 modify(name varchar2(25) default 'abc')
3)重命名现有的列
alter table emp1 rename column salary to sal;
4)删除现有的列
alter table emp1 drop column birthday;
清空表中的数据(与delete from table_name区分开)
truncate table emp2;
重命名表
rename emp2 to emp3;
删除表
drop table emp3;

浙公网安备 33010602011771号