【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;

 

posted @ 2020-05-15 15:14  emdzz  阅读(169)  评论(0)    收藏  举报