八 使用DDL语句管理表
常见的数据库对象
命名规则
- 必须以字母开头
- 必须在 1–30 个字符之间
- 必须只能包含 A–Z, a–z, 0–9, _, $, 和 #
- 必须不能和用户定义的其他对象重名
- 必须不能是Oracle 的保留字
- Oracle默认存储是都存为大写
- 数据库名只能是1~8位,datalink可以是128位,和其
- 他一些特殊字符
CREATE TABLE语句
必须具备:
- CREATE TABLE权限
- 存储空间
必须指定:
- 表名
- 列名, 数据类型, 数据类型的大小
数据类型
ALTER TABLE 语句
使用 ALTER TABLE 语句可以:
- 追加新的列
- 修改现有的列
- 删除一个列
删除表
- 数据和结构都被删除
- 所有正在运行的相关事物被提交
- 所有相关索引被删除
- DROP TABLE语句不能回滚,但是可以闪回
改变对象的名称
- 执行RENAME语句改变表, 视图, 序列, 或同义词的名称
- 必须是对象的拥有者
清空表
TRUNCATE TABLE 语句:
- 删除表中所有的数据
- 释放表的存储空间
- TRUNCATE语句不能回滚
- 可以使用 DELETE 语句删除数据
约束
约束是表一级的限制.如果存在依赖关系,约束可以防止错误的删除数据
约束的类型:
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
约束规则
用户可以自定义约束,也可以使用Oracle Server的sys_cn格式命名约束
约束创建的时机:
- 创建表的时候,同时创建约束
- 表结构创建完成后
- 约束可以定义在列一级,或者是表一级
- 通过数据字典查看约束
非空约束
唯一性约束
主键约束
外键约束
- FOREIGN KEY: 在子表中,定义了一个表级的约束
- REFERENCES: 指定表和父表中的列
- ON DELETE CASCADE: 当删除父表时,级联删除子表记录
- ON DELETE SET NULL: 将子表的相关依赖记录的外键值置为null
check约束
定义每一行记录所必须满足的条件
下面的表达式可以使用在check约束中:
引用CURRVAL, NEXTVAL, LEVEL, 和ROWNUM调用SYSDATE, UID, USER, 和USERENV 函数另一个表的查询记录
九 其他数据库对象
视图
视图是一种虚表.
- 视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。
- 向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句.
- 视图向用户提供基表数据的另一种表现形式
删除视图
删除视图只是删除视图的定义,并不会删除基表的数据
视图中使用DML的规定可以在简单视图中执行 DML 操作
当视图定义中包含以下元素之一时不能使用delete:
- 组函数
- GROUP BY 子句
- DISTINCT 关键字
- ROWNUM 伪列
当视图定义中包含以下元素之一时不能使用update
- 组函数
- GROUP BY子句
- DISTINCT 关键字
- ROWNUM 伪列
- 列的定义为表达式
当视图定义中包含以下元素之一时不能使用update
- 组函数
- GROUP BY子句
- DISTINCT 关键字
- ROWNUM 伪列
- 列的定义为表达式
序列
create sequence 序列名
minvalue 1
maxvalue 999999999999
start with 1
increment by 1
cache 100;
查询序列
查询数据字典视图 USER_SEQUENCES 获取序列定义信息
NEXTVAL 和 CURRVAL 伪列
NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用
- CURRVAL 中存放序列的当前值
- NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效
将序列值装入内存可提高访问效率
- 序列在下列情况下出现裂缝:
- 回滚
- 系统异常
- 多个表同时使用同一序列
- 如果不将序列的值装入内存(NOCACHE), 可使用表USER_SEQUENCES 查看序列当前的有效值
修改序列
修改序列的注意事项
- 必须是序列的拥有者或对序列有 ALTER 权限
- 只有将来的序列值会被改变
- 改变序列的初始值只能通过删除序列之后重建序列
- 的方法实现
删除序列
索引
索引:
- 一种独立于表的模式对象, 可以存储在与表不同的磁盘或表空间中
- 索引被删除或损坏, 不会对表产生影响, 其影响的只是查询的速度
- 索引一旦建立, Oracle 管理系统会对其进行自动维护,而且由 Oracle 管理系统决定何时使用索引.
- 用户不用在查询语句中指定使用哪个索引。
- 在删除一个表时, 所有基于该表的索引会自动被删除
- 通过指针加速 Oracle 服务器的查询速度
- 通过快速定位数据的方法,减少磁盘 I/O
什么时候不要创建索引
- 表很小
- 列不经常作为连接条件或出现在WHERE子句中
- 查询的数据大于2%到4%
- 表经常更新
以下情况可以创建索引:
- 列中数据值分布范围很广
- 列经常在 WHERE 子句或连接条件中出现
- 表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%