Oracle系列十 创建和管理表

时间:2021-07-25 03:19:21

常见的数据库对象

Oracle系列十 创建和管理表

Oracle 数据库中的表

用户定义的表:

  •     用户自己创建并维护的一组表
  •     包含了用户所需的信息
  •     如: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)
);


数据类型
Oracle系列十 创建和管理表

使用子查询创建表

  • 使用 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 语句

  • 使用 ALTER TABLE 语句追加, 修改, 或删除列的语法
ALTER TABLE table
ADD           (column datatype [DEFAULT expr]
           [, column datatype]...);
ALTER TABLE table
MODIFY       (column datatype [DEFAULT expr]
           [, column datatype]...);
ALTER TABLE table
DROP COLUMN  column_name;
ALTER TABLE table_name RENAME COLUMM old_column_name
TO new_column_name

追加一个新列

  • 使用 ADD 子句追加一个新列
  • 新列是表中的最后一列
ALTER TABLE dept ADD (
    job_id   VARCHAR2(9)
);

修改一个列

  • 可以修改列的数据类型, 尺寸和默认值
  • 对默认值的修改只影响今后对表的修改
ALTER TABLE dept80 MODIFY (
    last_name VARCHAR2(30)
);
ALTER TABLE dept80 MODIFY (
    salary NUMBER(9,2) DEFAULT 1000
);


删除一个列

  • 使用 DROP COLUMN 子句删除不再需要的列.
ALTER TABLE  dept80
DROP COLUMN  job_id; 

重命名一个列

  • 使用 RENAME COLUMN [table_name] TO子句重命名列
ALTER TABLE  dept80
RENAME COLUMN  job_id TO id; 

删除表

  • 数据和结构都被删除
  • 所有正在运行的相关事务被提交
  • 所有相关索引被删除
  • DROP TABLE 语句不能回滚
DROP TABLE dept80;
Table dropped.

清空表
TRUNCATE TABLE 语句:

  • 删除表中所有的数据
  • 释放表的存储空间
TRUNCATE TABLE detail_dept;
  • TRUNCATE语句不能回滚
  • 可以使用 DELETE 语句删除数据,可以回滚

对比:

  delete from emp2;
  select * from emp2;
  rollback;
  select * from emp2;

改变对象的名称

  • 执行RENAME语句改变表, 视图, 序列, 或同义词的名称
  • 必须是对象的拥有者
RENAME dept TO detail_dept;