八 使用DDL语句管理表

常见的数据库对象

Oracle的知识梳理3_数据类型

命名规则

  • 必须以字母开头
  • 必须在 1–30 个字符之间
  • 必须只能包含 A–Z, a–z, 0–9, _, $, 和 #
  • 必须不能和用户定义的其他对象重名
  • 必须不能是Oracle 的保留字
  • Oracle默认存储是都存为大写
  • 数据库名只能是1~8位,datalink可以是128位,和其
  • 他一些特殊字符

CREATE TABLE语句

Oracle的知识梳理3_数据类型_02

必须具备:

  • CREATE TABLE权限
  • 存储空间

必须指定:

  • 表名
  •  列名, 数据类型, 数据类型的大小

数据类型

Oracle的知识梳理3_数据类型_03

 

ALTER TABLE 语句

使用 ALTER TABLE 语句可以:

  • 追加新的列
  • 修改现有的列
  • 删除一个列

Oracle的知识梳理3_数据类型_04

Oracle的知识梳理3_oracle_05

删除表

  • 数据和结构都被删除
  • 所有正在运行的相关事物被提交
  • 所有相关索引被删除
  • DROP TABLE语句不能回滚,但是可以闪回

Oracle的知识梳理3_oracle_06

 

改变对象的名称

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

清空表

TRUNCATE TABLE 语句:

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

约束

约束是表一级的限制.如果存在依赖关系,约束可以防止错误的删除数据

约束的类型:

  • NOT NULL
  • UNIQUE
  • PRIMARY KEY
  • FOREIGN KEY
  • CHECK

约束规则

用户可以自定义约束,也可以使用Oracle Server的sys_cn格式命名约束

约束创建的时机:

  • 创建表的时候,同时创建约束
  • 表结构创建完成后
  • 约束可以定义在列一级,或者是表一级
  • 通过数据字典查看约束

非空约束

Oracle的知识梳理3_数据类型_07

唯一性约束

Oracle的知识梳理3_伪列_08

主键约束

Oracle的知识梳理3_oracle_09

外键约束

  • FOREIGN KEY: 在子表中,定义了一个表级的约束
  • REFERENCES: 指定表和父表中的列
  • ON DELETE CASCADE: 当删除父表时,级联删除子表记录
  • ON DELETE SET NULL: 将子表的相关依赖记录的外键值置为null

Oracle的知识梳理3_数据_10

Oracle的知识梳理3_伪列_11

Oracle的知识梳理3_伪列_12

check约束

定义每一行记录所必须满足的条件

下面的表达式可以使用在check约束中:

引用CURRVAL, NEXTVAL, LEVEL, 和ROWNUM调用SYSDATE, UID, USER, 和USERENV 函数另一个表的查询记录

Oracle的知识梳理3_oracle_13

Oracle的知识梳理3_伪列_14

 

九 其他数据库对象

视图

视图是一种虚表.

  • 视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。
  • 向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句.
  • 视图向用户提供基表数据的另一种表现形式

Oracle的知识梳理3_数据_15

删除视图

删除视图只是删除视图的定义,并不会删除基表的数据

Oracle的知识梳理3_伪列_16

视图中使用DML的规定可以在简单视图中执行 DML 操作

当视图定义中包含以下元素之一时不能使用delete:

  • 组函数
  • GROUP BY 子句
  • DISTINCT 关键字
  • ROWNUM 伪列

当视图定义中包含以下元素之一时不能使用update

  • 组函数
  • GROUP BY子句
  • DISTINCT 关键字
  • ROWNUM 伪列
  • 列的定义为表达式

当视图定义中包含以下元素之一时不能使用update

  • 组函数
  • GROUP BY子句
  • DISTINCT 关键字
  • ROWNUM 伪列
  • 列的定义为表达式
     

 

序列

 

Oracle的知识梳理3_数据_17

Oracle的知识梳理3_oracle_18

create sequence 序列名
minvalue 1
maxvalue 999999999999
start with 1
increment by 1
cache 100;

Oracle的知识梳理3_数据类型_19

查询序列

查询数据字典视图 USER_SEQUENCES 获取序列定义信息

Oracle的知识梳理3_伪列_20

NEXTVAL 和 CURRVAL 伪列

NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用

  • CURRVAL 中存放序列的当前值
  • NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效

 

将序列值装入内存可提高访问效率

  • 序列在下列情况下出现裂缝:
  • 回滚
  • 系统异常
  • 多个表同时使用同一序列
  • 如果不将序列的值装入内存(NOCACHE), 可使用表USER_SEQUENCES 查看序列当前的有效值
     

Oracle的知识梳理3_oracle_21

修改序列

Oracle的知识梳理3_数据类型_22

修改序列的注意事项

  • 必须是序列的拥有者或对序列有 ALTER 权限
  • 只有将来的序列值会被改变
  • 改变序列的初始值只能通过删除序列之后重建序列
  • 的方法实现
     

 

删除序列

Oracle的知识梳理3_数据_23

索引

Oracle的知识梳理3_oracle_24

索引:

  • 一种独立于表的模式对象, 可以存储在与表不同的磁盘或表空间中
  • 索引被删除或损坏, 不会对表产生影响, 其影响的只是查询的速度
  • 索引一旦建立, Oracle 管理系统会对其进行自动维护,而且由 Oracle 管理系统决定何时使用索引.
  • 用户不用在查询语句中指定使用哪个索引。
  • 在删除一个表时, 所有基于该表的索引会自动被删除
  • 通过指针加速 Oracle 服务器的查询速度
  • 通过快速定位数据的方法,减少磁盘 I/O

 

什么时候不要创建索引

  • 表很小
  • 列不经常作为连接条件或出现在WHERE子句中
  • 查询的数据大于2%到4%
  • 表经常更新

以下情况可以创建索引:

  • 列中数据值分布范围很广
  • 列经常在 WHERE 子句或连接条件中出现
  • 表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%

Oracle的知识梳理3_oracle_25

Oracle的知识梳理3_数据类型_26