准备
mkdir /space
chown -R oracle /space
1.创建表空间
SQL>create tablespace sales
datafile '/space/sales.dbf' size 100M;
2.查看有哪些表空间
SQL> select tablespace_name from dba_tablespaces;
3.创建表sales并将其放在sales空间中
NAME SEX ADDRESS RESULTS
---------- ---------- ---------- -------
张三 男 海淀 90
李山 女 沈阳 88
周兰 女 沈阳 88
赵毅 女 沈阳 88
李丽 女 天津 98
林丹 男 北京 78
王明 男 中国北京 100
王一 男 海淀 69
create table sales
(name varchar(50),
sex varchar(10),
address varchar(100),
results float(10))
tablespace sales;
4.然后,向表中插入如上表的第一条纪录
insert into sales values('zhaosi','男','昌平',90);
5.提交事务
sql>commit;
6.查询表中的数据
格式化字符类型数据
Col 列名 for a10
格式化数值型数据
col 列名 for 99.999
select * from sales;
7.再插入记录
insert into sales values('lisi','nan','changping',70);
8.回滚
sql>rollback;
9.查询表中的数据
select * from sales;
10.自动提交
sql>set autocommit on;
sql>insert into sales values('王五','nan','昌平',70);
11.回滚
sql>rollback;
12..查询表中的数据
sql>select * from sales;
二、索引
1.对sales表的address列创建索引sales_address_index
create index sales_name_index
on sales(address);
2.对sales表的name列创建索引sales_name_unique_index
create index sales_name_unique_index
on sales(name);
3.创建反向索引
create index sales_reverse_index
on sales(results) reverse;
4.创建位图索引
create bitmap index sales_bit_index on sales(sex);
5.创建基于函数的索引
create index sales_address_index
on sales(upper(address));
select * from sales where UPPER(address)='昌平';
6.select table_name,index_name from user_indexes where table_name='SALES';
7重建索引
alter index sales_address_index rebuild;
8.合并索引碎片
alter index sales_address_index coalesce;
三、视图
1.创建视图salesnvview
create or replace view salesnv as select * from sales where sex='女' with check option;
insert into salesnv values('刘一','女','天津',100)
*
第 1 行出现错误:
ORA-01402: 视图 WITH CHECK OPTIDN where 子句违规
insert into salesnv values('刘一','女','天津',100);
select * from salesnv;观察此人是否添加
select * from sales;观察基表是否也添加了此人
2.创建物化视图
SQL> create user c##scott
2 identified by scott;
1)为c##scott用户分配创建物化视图
创建物化视图的条件:
①query rewrite的权限
②以及对创建物化视图所涉及的表的访问权限和创建表的权限
③如果要实现物化视图的增量刷新还要创建物化视图日志,通过日志判断数据是否有变化
$sqlplus / as sysdba
sql>create user c##scott identified by scott default tablespace users temporary tablespace temp quota unlimited on users;
sql>grant create materialized view to c##scott;
sql>grant query rewrite to c##scott;
sql>grant create any table to c##scott;
sql>grant select any table to c##scott;
SQL> grant connect to c##scott;
2)创建物化视图日志
sql>conn c##scott/scott;
SQL> create table test(
id int,
name varchar(10),
sex varchar(5));
SQL>create materialized view log on test with rowid;
3)创建物化视图
SQL> create materialized view mt_test
build immediate
refresh fast
on commit
with rowid
as
select * from test where sex='女';
说明:
物化视图的刷新方式
on commit指物化视图在对基表的dml操作事务提交的同时进行刷新
on demand指物化视图在用户需要的时候进行刷新,可以手工通过dbms_mview.refresh等方法进行刷新,也可以通过job定时进行刷新
选择了刷新方式后,还需要选择一种刷新类型
complete 对整个物化视图进行完全的刷新
fast 采用增量刷新,只刷新自上次刷新以后进行的修改
force oracle在刷新的时候进行判断是否可以进行快速刷新,如果可以则采用fast方式,否则采用complete方式
never 物化视图不进行任何刷新
build immediate立即创建物化视图,也可以选择build deffered,该参数说明在物化视图定义后不会立即执行,而是延迟执行,在使用该视图时再创建
四、序列
1.创建序列
sql>create sequence sale_seq
start with 1
increment by 1
nomaxvalue
nocycle;
2.创建表project
create table project
(id int,
name varchar2(10));
3.向project表添加记录
insert into project values(sale_seq.nextval,'zhangsan');
insert into project values(sale_seq.nextval,'lisi');
select * from project;
4.查看序列的CURRVAL值
SQL> select sale_seq.currval from dual;
5.修改序列的最大值到5000
SQL> alter sequence sale_seq
2 maxvalue 5000
3 cycle;
6.查看序列
SQL> select sequence_name,increment_by,cache_size from user_sequences where sequence_name='SALE_SEQ';
五、同义词
1.创建私有同义词,以system身份为c##scott.emp表创建同义词sy_emp.
注意私有同义词名称不可以与当前模式的对象名相同。要在自身的模式创建私有同义词,用户必须拥有create synonym系统权限。
要在其他用户模式创建私有同义词,用户必须拥有create any synonym系统权限
$conn system/oracle11g
sql>select * from c##scott.emp
sql>create synonym sy_emp for c##scott.emp;
sql>select * from sy_emp;
2.创建一个私有同义词,访问当前实例c##scott.emp表
SQL> create synonym sy_t for c##scott.emp@orcl;
SQL> select * from sy_t;
2.创建公有同义词,以c##scott用户的身份为dept表创建公有同义词public_sy_dept,并验证用户c##user1可以通过public_sy_dept访问c##scott.dept表。
注意创建公有同义词用户必须拥有create public synonym系统权限
1)以system用户登录数据库,并创建用户c##user1
$conn system/oracle11g
sql>create user c##user1 identified by 123456 quota unlimited on users;
sql>grant connect to c##user1;
2)将创建公有同义词权限给c##scott
sql>grant create public synonym to c##scott;
3)以c##scott用户身份登录数据库
sql>conn c##scott;
4)将查询dept权限给c##user1
sql>grant select on dept to c##user1;
5)创建公有同义词public_sy_dept作为c##scott用户dept表的别名
sql>create public synonym public_sy_dept for dept;
6)以c##user1用户身份登录数据库
sql>conn c##user1/123456
sql>select * from public_sy_dept;
六、分区表.创建一个表,包含销售id,产品id,销售日期,并按销售日期创建3个分区,分别是小于2017-4-1和小于2014-7-1
create table sales1
(
sales_id number,
product_id varchar2(5),
sales_date date not null)
partition by range (sales_date)
(
partition p1 values less than (to_date('2017-04-1','yyyy-mm-dd')),
partition p2 values less than (to_date('2017-07-1','yyyy-mm-dd')),
partition p3 values less than (maxvalue)
);
要查看在第三季度的数据,请输入以下语句
select * from sales1 partition(p3);
要删除第三季度的数据
delect from sales1 partition(p3);