创建、维护表( 属于DDL )
create – 创表
注意事项
当前用户拥有 create table 权限
当前用户拥有一定大小的表空间
使用不属于本用户的表:用户名.表名
数据字典
语法结构
create table 表名 (
列名 数据类型 【约束】
)
create table 表名 [ ( 列名) ] as 子查询
示例1
create table student (
id number ( 11 ) ,
sex char ( 2 ) default ( '男' ) ,
sname varchar2 ( 15 )
) ;
示例2:不会复制父表的约束
create table dept_copy ( a, b, c) as select * from dept;
create table dept_copy as select * from dept where 1 = 0 ;
alter – 修改表结构
注意事项
修改表
只能修改 列名、数据类型及长度、默认值
数据类型修改: 该列的所有数据都必须为 null 或者 ‘’
数值型长度修改: 长度变小 → 改前数据必须为空、长度变大 → 无限制
字符型长度修改: 长度表小 → 符合当前数据的最小值、长度变大 → 无限制
删除列
默认: 被外键引用的列,不能被删除
表必须保留一列
语法结构
alter table 表名 add ( 新列的定义 )
alter table 表名 modify ( 列的定义 )
alter table dept rename column 旧列名 to 新列名;
alter table 表名 drop ( 列名)
示例
alter table dept add ( describe varchar2 ( 30 ) not null ) ;
alter table dept modify ( loc varchar ( 30 ) ) ;
alter table dept rename column loc to local;
alter table dept drop ( describe ) ;
drop – 删除表
注意事项
表的结构、以及数据被删除
约束、索引被删除
与表关联视图、同义词被保留、但已失效
语法结构
drop table 表名;
rename – 重名表名
语法结构
rename 旧表名 to 新表名
truncate – 截断表
注意事项
权限: 表拥有者 或者 权限是delete any table
删除表中所有数据
语法结构
truncate table 表名
视图 – view
选择性的显示数据表的一部分
注意事项
复杂视图如果有 单行、多行函数,必须写明视图列名 或者 基表函数别名
update、delete只能作用视图显示出来的数据,其他未显示的视图数据即使能运行成功,但并不能作用到基表
with read only:不能通过视图执行任何DML语句
with check option:insert的数据必须在视图能显示、即符合where范围
数据字典
user_views:包含视图的定义
user_updatable_columns:包含描述哪些列可以更新、插入、删除
user_objects:包含用户的对象
通过视图进行DML操作
delete – 创视图时的子查询不存在以下内容即可以删除
group函数、( group by、distinct )关键字
update – 创视图时的子查询不存在以下内容即可以修改
group函数、( group by、distinct )关键字
表达式定义的列
rownum 伪列
insert – 创视图时的子查询不存在以下内容即可以插入
group函数、( group by、distinct )关键字
表达式定义的列
rownum 伪列
基表中未在视图中选择的其它列定义为非空并且没有默认值 — ????看不懂
视图view
简单视图
基表数量1个
可以DML操作
复杂视图
基表数量1个或多个
包含函数
包含数据组
不一定可以DML操作
创建视图
语法结构
create 【 or replace 】【 force / noforce 】 view 视图名 【 视图列名 】
as 子查询
【 with check option 【constraint 约束名】 】
【 with ready only 】
示例
create view view_emp as select * from emp;
create view dept_sum ( dname, minsal, avgsal )
as select dname, mix ( sal) , avg ( sal)
from dept, emp
where dept. deptno = emp. deptno
group by dname;
删除视图
语法结构
drop view 视图名;
约束 – constraint
列值必须符合某种限制 – 不仅仅是数据类型
oracle默认约束命名: SYS_C + 数字n
自定义约束建议命名规则: 表名_列名_约束类型
数据字典
user_constraints:查看表上所有约束
user_cons_columns:查看与约束相关联的列名
约束
not null — 非空值、只能是列级别
unique — 列组合值必须唯一、可以空值
check — 列值在某个范围、不允许使用伪列
primary key — 主键
foreign key — 外键[ 空值、或者’参照列值’ ]、参照( 外表的主键、唯一键 )
添加约束 – 创表时
外键删除类型
默认:当主键值被外键引用时,不能删除被引用的主键行
on delete cascade → 参照行被删除、相应的外键列被删除
on delete set null → 参照行被删除、对应的外键列值设置为 空
语法结构
create table 表名 (
列名 数据类型 【 constraint 约束名 】references 参照表( 参照列 ) 删除类型 ,
列名 数据类型 默认值 【 constraint 约束名 】 约束类型,
【 constraint 约束名 】 约束类型( 列名 ) ,
【 constraint 约束名 】foreign key ( 外键列名 ) references 参照表( 参照列 ) 删除类型
)
示例
create table student (
sid number ( 11 ) constraint student_sid_unique unique,
sname varchar2 ( 16 ) not null,
loc varchar2 ( 30 ) ,
sex char ( 2 ) check ( sex in ( '男' , '女' ) ,
age number,
constraint student_loc_unique unique ( loc) ,
constraint student_age_check check ( age between 18 and 30 )
) ;
追加约束 – 已经创表
语法结构
alter table 表名 add 【 constraint 约束名 】 约束类型( 列名 )
alter table 表名 add 【 constraint 约束名 】 foreign key ( 外键列名 ) references 参照表( 参照列 )
alter table 表名 modify ( 列名【 constraint 约束名 】not null )
示例
alter table student add constraint student_sid primary key ( sid ) ;
alter table student add foreign key ( sname ) references school ( sname) ;
alter table student modify ( sex not null ) ;
删除约束
语法结构
alter table 表名 drop primary/ foreign key ( 列名 ) ;
alter table 表名 drop constraint 约束名 【 cascade 】
示例
alter table student drop primary key cascade
alter table student drop constraint student_sid_unique;
启用、禁用约束
大批数据导入、禁用约束能提高导入效率
语法结构
alter table 表名 disable constraint 约束名 【 cascade】 ;
alter table 表名 enable constraint 约束名;
索引 – index
类似书本目录、查找页面内容不需要全书翻页查找,只需根据目录查找大概的范围位置
注意事项
占用空间
降低DML操作速度
数据字典
user_indexs:包含索引的名称、及其唯一性
user_ind_columns:包含索引名称、表名、列名
索引
单列索引 — 建立在单列上
复合索引 — 建立在列组合上
适合创建索引情况
数据量大
查询结果条数在 2% ~ 4%左右
经常where的列
查询列包含大量null — 空值不包含在索引内
不适合创建索引情况
数据量小
不常作为查询条件的列
查询条件中有单行函数、not null、!=、<>
频繁更新的表
例如:empno创建了索引,但是查询条件 (empno+12)有算术、单行函数则该索引不会起作用
创建索引
手动创建索引名建议使用:idx_表名_列名
创建方式
自动创建 — primary key、unique系统会自动创建索引
手动创建
语法结构
create index 索引名 on 表名( 列名 ) ;
示例
create index idx_emp_empno on emp ( empno ) ;
create index idx_emp_empnoDeptno on emp ( empno, deptno ) ;
测试检索速度
select * from emp where empno= 100000 ;
create index idx_empCopy_empno on emp_copy ( empno) ;
删除索引
索引被删除 → 索引所占的空间被释放
语法结构
drop index 索引名
同义词( 对象别名 ) – synonym
数据库对象的指针 → 类似指向java对象的变量名 公有同义词的创建、删除 → 只能由数据库管理员进行操纵
创建同义词
语法结构
create 【public 】synonym 对象别名 for 对象名 -- - 默认 private
示例
create synonym s_emp for emp;
select * from emp;
select * from s_emp;
&emsp;
删除同义词
语法结构
drop synonym 同义词( 对象别名 )
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/46599.html
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!