使用子查询创建表

如果使用子查询创建表时需要注意的是会将子查询中的数据拷贝过来
create table emp1 as select * from emp;

修改表的结构

  • 添加新列
    alter table emp1 add sex char(2);
  • 修改列的名字
    alter table emp1 rename column sex to hhh;
  • 修改列
    alter table emp1 modify hhh varchar2(10);
  • 删除列
    alter table emp1 drop column hhh;
  • 修改表名
    rename emp1 to emp2;

查看回收站

show recyclebin;
注意:
1.管理员是没有回收站的,针对的是普通用户
2.在使用主机登录管理员账号时,是可以随便输入密码和用户名的,因为存在主机认证
3.要清空回收站使用purge关键字
purge recyclebin;

将在回收站的表还原

flashback table test1 to before drop;

闪回技术恢复

在oracle10中有6中恢复
1.闪回数据库
2.闪回删除
3.闪回查询
4.闪回版本查询
5.闪回事务查询
6.闪回表
7.闪回数据归档(oracle11)

视图

虚表,简化复杂的操作,一般用来查询,不做insert,update和delete操作

create view view_emp
 as
 select
 *
 from emp
 with read only(with check option 在查询的时候携带where条件);

序列

序列在内存当中

create sequence name
[increment by n步长]
[start with n数组的开始值]
[{maxvalue n| nomaxvalue}最大值]
[{minvalue n| nominvalue}最小值]
[{cycle|nocycle}是否循环]
[{cache n| nocache}数组的长度,默认为20,如果是nocache,表示数组的长度为1]

在序列中提供了两种操作

nextval:取得序列的下一个内容
currval:取得序列的当前内容
在初始情况下,序列中的指针没有指向第一个值,而是指向第一个值的前面位置

序列可能产生裂缝的原因:

1.回滚
2.系统异常
3.多个表共用一个序列

create sequence mysequnce
    increment by 10
    start with 10
    maxvalue 200
    nocycle
    cache 100;


create table testseqeunce(sid number,sname varchar2(10));


insert into testseqeunce values(
    myseqeunce.nextval,
   'hhh')

索引

索引是用于加速数据存取的数据对象,默认是b树
create index myindex on emp(deptno);

什么时候不要创建索引

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

补充知识

  • 查看sql执行计划
explain plan for select * from emp where deptno=10;
select * from table(dbms_xplan.display);

同义词

别名,是为了提高安全,对用户透明
create synonym mysynonym for hr.employees;
select * from mysynonym;

创建和管理表.txt