同名對象:
connect yyaccp/accp;
drop user myuser;
create user myuser identifIEd by myuser;
grant create synonym to myuser;
connect myuser / myuser;
create synonym mytable for yyaccp.mytable;
使用公共同名對象
Connect yyaccp/accp;
Grant create synonym to myuser;
Connect myuser/myuser;
Create public synonym jobs for yyaccp.jobs;
序列是用來生成唯一,連續的整數的數據庫對象。序列是用來自動生成主鍵或唯一鍵的值。
以下代碼創建了一個名為:emp_id的序列(序列號從10開始,自動增長為1,最大值為2000)
Create sequence mytable_id start with 10 increment by 1 maxvalue 2000
以下代碼把 emp_id 序列產生的值插入到mytable表中
insert into mytable values(mytableid.nextval,''rose'',''beijing'',''[email protected]'',date''2007-10-10'');
以下代碼修改了mytable_id 序列的信息。重新設置了新的 maxvalue 值以及設置增量值為2
Alter sequence mytable_id increment by 2 maxvalue 5000;
********* 注意 :不能修改序列的 start with 參數。
以下代碼演示了刪除一個序列
Drop sequence emp_id;
可以通過查詢user_sequence 字典表來獲取有關序列的信息。
user_sequence 表中的部分列
Sequence_name
序列名
Min_value
最小值
Max_value
最大值
Increment_by
序列的增量
Cycle_flag
該序列是否循環,該值為Y或N
Order_flag
該序列是否有序,該值為Y或N
Cache_size
保存在內存中的序列值的個數
Last_number
該序列生成或緩存的最後一個數字
以下查詢顯示了user_sequence表中的詳細信息
select * from user_sequences
刪除序列:
drop sequence mytable_id;
視圖:
視圖是在一個或者多個表上的預定義查詢。
以下代碼基於employees2表創建一個名為: employee2_vIEw的視圖:
1. create view employee2_vIEw as select * from employees2;
2. create view employee2_vIEw as slect * from employees2 where division_id = ''BUS'' OR job_id=''PRE''
在視圖中使用 with check option 。修改視圖後在視圖中不能顯示修改的行。使用with check option 可以防止視圖數據被修改。 create or replace view employee2_vIEw as select * from employees2 where division_id = ''BUS'' OR job_id=''PRE'' with check option
創建只讀視圖(創建只讀視圖後,用戶將不能修改視圖):
create or replace view employee2_vIEw as select * from employees2 where division_id = ''BUS'' OR job_id=''PRE'' with READ ONLY
創建帶有錯誤視圖:
下面語句創建一個基於表venmast 的視圖 ,但是在數據庫中並不存在名為“venmast”的表:
Create force view vtable as select * from vIEwtable;
創建表連接視圖:
Create vIEw emp2_job_divisions as
select e.employee_id,e.division_id,d.name as division_name,e.job_id,j.name as jobname,
first_name,last_name,salary
from employees2 e,jobs j,divisions d
where e.job_id = j.job_id
and e.division_id = d.division_id
鍵保留表:
在聯接視圖中,如果視圖包含了一個表的主鍵,並且也是這個視圖的的主鍵,則這個鍵被保留,這個表稱為鍵保留表,Oracle 可以通過此視圖向表中插入行。包含外邊連接的視圖通常不包含鍵保留表
以下代碼可以修改視圖中的數據:
update emp2_job_divisions set first_Name = ''aaaaa'' where employee_id=1;
以下代碼不能修改視圖中的數據:
update emp2_job_divisions set jobname = ''aaa'' where employee_id=1;
使用索引
創建唯一索引:
以下代碼在order_master 表的orderno 列上創建了一個名為order_no 的唯一索引:
create unique index mytableid on mytable(id)
創建組合索引:
組合索引是在表中的多個列上創建的索引。組合索引中列的順序是任意的,不必是表中相鄰的列。
以下代碼在employee2 表中創建了組合索引:
Create index emp_first_last on employees2(first_name,last_name);
反向鍵索引:
反向鍵索引是一種特殊的索引,在索引基於含有序數的列時非常有用
以下代碼在pemployee 表中創建了反向索引。
Create or replace index empid on emp(id) reverse;
位圖索引適用於低基數列,也就是不同值的數目比表的行數少的列。
以下代碼演示了在order_detail 表中創建位圖索引。
Create bitmap index employees2_first_name on employees2(first_name);
索引組織表:
索引組織表與普通表的不同之處在於,該表的數據存儲在與其關聯的索引中。對表數據進行的修改,只會導致對索引的更新。
primary key 是索引組織表必須的。
以下代碼創建了索引組織表:
create table ind_org_tab(
vencode number(4) primary key,
venname varchar2(20)
)
organization index;
函數索引:
create index employees2_firstname on employees2(lower(first_name));
查詢索引數據:
select * from employees2 where lower(first_name) = ''john'';
索引中的分區:
create table order_mast(
orderno number(4),
venname varchar(20)
)
partition by range(orderno)(
partition oe1 values less than(1000),
partition oe2 values less than(2000),
partition oe3 values less than(maxvalue)
);
局部分區索引是在分區表上創建的一種索引,在局部分區索引中,Oracle 為每一個分區建立了一個獨立的索引.
在上面創建的分區表上創建局部索引。
Create index myind on order_mast(orderno) local;
查看索引信息:
select segment_name,partition_name,segment_type,tablespace_name from user_segments where segment_name=''MYIND'';
修改索引,以下代碼重命名了索引。
Alter index vn_ind rename to c_vn_ind;
刪除索引:
Drop index cvn_ind;
獲取索引列信息:
Select index_name,table_name,column_name from user_ind_columns
Order by index_name,column_position;