Oracle系列十 创建和管理表

Posted 码上加油站

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
);


数据类型


使用子查询创建表

  • 使用 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;

以上是关于Oracle系列十 创建和管理表的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段

oracle系列5:权限管理

Oracle-常用数据库对象笔记(片段)

Oracle 基础系列之1.3 用户管理

关于Oracle与MySQL的使用总结

实验十二:表空间管理与维护