0 前言
学习完Oracle数据库了,在此将个人认为一些很重要但容易忘记的内容记录下来,供以后查看。
一、数据的导入导出
1. 数据导出
Oracle数据库使用exp命令进行导出,导出的结果是一个dmp文件,分三种形式导出(一次只能选择一种方式):
- 导出整个数据库实例下的所有数据,参数为full
- 导出指定用户的所有表,参数为owner
- 导出指定表,参数为tables
导出的通用格式为:
exp user/pwd@sid file=path log=path 参数
-- 注意:log日志文件不是必须项,开发中一般要求导入导出是生成日志文件,其他项则为必须项
-- 1. 将数据库orcl全部导出
exp system/oracle@orcl file=d:\daochu.dmp log=d:\daochu.log full=y
-- 2. 将数据库中用户1和用户2的表导出
exp system/oracle@orcl file=d:\daochu.dmp log=d:\daochu.log owner=(user1, user2)
-- 3. 将数据库中指定用户的表1和表2导出
exp system/oracle@orcl file=d:\daochu.dmp log=d:\daochu.log tables=(user.table1, user.table2)
-- 注意: 2、3的参数中若只有一项则可省略小括号
2. 数据导入
Oracle数据库使用imp命令进行导入,可以将dmp文件导入到数据库中。与数据导出相对于,也分为三种导入方式:
- 导入整个数据库实例下的所有数据
- 导入指定用户的所有表
- 导入指定表
再导入dmp文件前,必须保证数据库中的表空间和用户已经存在,否则就要创建相应的表空间和用户。
另外,Oracle向下兼容,即高版本能导入低版本的dmp文件,反之则不行。
现假定表空间和用户都已存在(若没有,请参考下文表空间和用户的创建),其命令格式为:
imp user/pwd@sid file=path log=path 参数
-- 1. 将数据库orcl全部导入
imp system/oracle@orcl file=d:\dw.dmp log=d:\daoru.log full=y ignore=y
-- ignore 表示的是导入时是否忽略遇到的错误,默认为n
-- 2. 将dmp文件中的用户1导入到指定用户用户2中
imp system/oracle@orcl file=d:\dw.dmp log=d:\daoru.log fromuser=user1 touser=user2 ignore=y
-- 3. 导入用户user1的指定表
imp system/oracle@orcl file=d:\dw.dmp log=d:\daoru.log fromuser=user1 tables=(table1, table2) ignore=y
二、表空间及用户的创建赋权限
1. 查看表空间(数据表空间、临时表空间)
- 查看数据表空间
select * from dba_data_files;
- 查看临时表空间
select * from dba_temp_files;
2. 创建表空间
--创建数据表空间
create tablespace ts_dw datafile 'D:\ts_dw_01.dat' size 10M;
--创建临时表空间
create temporary tablespace ts_temp tempfile 'D:\ts_temp_01.dat' size 10M;
其中,增加表空间的容量的方式为:
alter tablespace ts_dw add datafile 'D:\ts_dw_02.dat' size 10M;
故表空间ts_dw的时间存储空间为20M,只不过使用两个文件存储,分别是ts_dw01.dat、ts_dw02,dat
3. 创建用户
--创建用户u1
creat user u1 identified by pwd default tablespace ts_data temporary tablespace ts_temp;
--给用户赋权限
grant dba to u1;
三、数据库对象的使用
1. 表的创建
表创建的两种方式(指定表空间):
--1. 手动创建(基本创建方式)
create table t1 (列名 数据类型[约束]...) tablespace ts_data;
--2. 子查询创建
create table t2 tablespace ts_data as select * from t1;
若建表时未指定表空间,会使用默认的表空间,此时要更改表的表空间使用如下语句:
alter table t1 move tablespace 表空间名
2. 修改表名和字段名
1) Oracle修改表名
修改表名共有两种方式:
--1. 采用alter table
alter table t1 rename to tt1;
--2. 直接使用rename方式
rename t2 to tt2;
注意:
与MySQL的区别:
- 方式1完全相同,但方式二则有点细微的差别,MySQL的执行语句为:
rename table t2 to tt2;
注意,此处多了个table;
2) Oracle修改字段名:
其格式为:
alter table t1 rename column 字段名 to 新字段名;
与MySQL的区别:
alter table t1 change column 字段名 新字段名 字段类型;
3. 创建索引
create [unique] index 索引名 on 表名(列名) tablespace 表空间;
4. 创建序列
create sequence 序列名
minvalue 10000 -- 序列最小值
maxvalue 99999 -- 序列最大值
start with 20000 -- 开始值
increment by 2 -- 每次增长的值
cache 20 -- 数据库缓存值,默认为20
cycle; -- 到最大值后是否重新开始, nocycle不新头开始
索引的使用:
- nextval获取下一个值,currval获取当前值;
- 第一次使用时必须先执行nextval,否则currval没数据
例:
select seq.nextval from dual;
select seq.currval from dual;
四、添加非空约束
alter table 表名 modify 列名 not null;
五、将数据导出txt文件
spool 路径
set echo off --不显示脚本中正在执行的sql语句(即本条select语句)
set feedback off --不显示sql查询或修改行数(测试并未看到实际效果)
set term off --不在屏幕显示txt文件的结果
set heading off --不显示列名
set linesize off --设置行宽,默认100,值要求大于你的查询结果的长度,否则会换行
select 语句
--执行完毕
spool off