日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Oracle Class4. 數據庫對象(同義詞,序列,視圖,

系統 1956 0

------------------------2013-5-9------------------------
索引的建立情況:經常用于查詢,排序和分組的列(即經常在where,order或group by子句中出現的列)

主鍵索引和復合索引。

desc student;
create index i_stu_name on student(STU_NAME);

--刪除索引,當表結構被刪除時,與其所有的索引都會隨之刪除。
drop index i_stu_name;

--查詢索引的語句,表名必須大寫,否則查詢不到值。
select table_name, index_name,status from all_indexes where table_name = 'STUDENT';

select index_name,column_name,column_position from all_ind_columns where table_name='STUDENT';

索引的特點:
1.不同值較多上建立索引,不同值少的列上不要建。如性別列只有男與女兩個值,因此就沒有必要建立索引。(bitmap)
2.索引上面加表達式,索引不能正常使用。 (函數索引)
3.where子句中如果使用in,or,like,!=,均會導致索引不能正常使用。
4.使用復合索引進行查詢時必須使用前置列。

寫where條件時,有索引的判斷在前,其他字段的判斷在后。如果where條件中用到復合索引,按照索引列在復合索引中出現的順序來依次寫where條件。
使用多表連接時,在from子句中,將記錄數少的表放在后面,可提高執行效率。

首先從大表中查詢需要的記錄,此時記錄數已經被大量縮小,然后再和其他兩個表連接,速度會得到很大改善!

查詢數量較大時,使用表連接代替in,exists,not in,not exists等。

然后不斷的積累經驗,并且注意不能一概而論。

全局索引,本地索引,全局分區索引。

--創建臨時表
--create global temporary table myemp as select * from student;

select * from myemp;
desc myemp;

--刪除臨時表
drop table myemp;

--增加一個列
--alter table student add(deptno varchar2(6));
--修改一個列
--alter table student modify(deptno varchar2(10));
--刪除表中的一個列,oracle8.0.5版本以上方可。
alter table student drop column deptno;

desc student;

-->3.2.4使用CHECK做限制條件

------------------------2013-5-10------------------------

--創建員工宿舍表
create table lodging(
? lodging char(18) primary key,
? name varchar2(10)
);

--創建工人表
create table worker(
? empno number(4) primary key,
? name varchar2(10),
? age number(2) check(age between 18 and 60),?? --check檢查約束
? lodging char(18) references lodging(lodging)? --外鍵關聯
);

--員工基本信息表
create table emp3(
? empno number(4) constraint abc primary key,
? ename varchar2(10),
? job varchar2(10),
? sex char(2) check(sex='男' or sex='女'),
? mgr number(4),
? hiredate date,
? sal number(7,2),
? comm number(7,2),
? deptno number(2),
? check (sal+comm > 0 and sal+comm < 5000)
);


--使用unrecoverable創建表,nolodging lodging
create table table_copy as select * from emp3 unrecoverable;
--使用nolodging關鍵字創建
create table table_copy2 as select * from emp3 nolodging;
--使用lodging關鍵字創建
create table table_copy3 as select * from emp3 lodging;

--查詢表空間
select tablespace_name,table_name,initial_extent from user_tables;

create table table3(
? xm varchar2(12),
? sal number(4,2)
);

//修改表結構
alter table table3 modify sal number(6,2);

insert into table3 values('gao',1111.11);
insert into table3 values('gao',1111.11);
insert into table3 values('zhu',5555.55);


insert into table3 values('zhu',55551.55);
ORA-01438: 值大于此列指定的允許精確度

##定點數的精度(p)和刻度(s)遵循以下規則##
1.當一個數的整數部分的長度 > p-s時,Oracle會報錯。
alter table table3 add sal2 number(6,2);???? -->1111.11
2.當一個數的小數部分的長度 > s時,Oracle就會舍入。??
insert into table3 values('zhu',5555.5589);???????? -->5555.56
3.當s(scale)為負數時,Oracle就對小數點左邊的s個數字進行舍入。
alter table table3 add sal2 number(2,-2);

insert into table3 values('zhu',1111.11,5609.12);?? -->5600
insert into table3 values('zhu',1111.11,5678.78);?? -->5700
insert into table3 values('zhu',1111.11,609.12);??? -->600
insert into table3 values('zhu',1111.11,63.12);???? -->100
insert into table3 values('zhu',1111.11,43.12);???? -->0

4.當s > p時,p表示小數點后第s位向左最多可以有多少位數字,如果大于p則Oracle報錯,小數點后s位向右的數字被舍入。
--更加明白的說法--
--當p小于s時候,表示數字是絕對值小于1的數字,且從小數點右邊開始的前s-p 位必須是0,保留s位小數。
insert into table3 values('zhu',1111.11,43.12,0.00126);? -->0.0013

insert into table3 values('zhu',1111.11,43.12,0.00996);? -->報錯,這樣會進位,絕對值大于1。
#http://ilinux.iteye.com/blog/289550#

--對表中的列表示為不使用
--alter table table3 set unused(sal3);


--創建主鍵
create table dept1(
? deptno number(2),
? dname varchar2(10),
? loc varchar2(20),
? constraint pk_dept primary key(deptno)
);

--增加表的主鍵
--alter table table3 add ( pk_key primary key (sal) );

--ORA-00907: 缺少右括號 ??
alter table table3 add(pk_key primary key (xm));? --可能跟表有關系

alter table dept1 add primary key(deptno);??????? --系統默認的名稱
alter table dept1 add constraint pk_dept primary key(deptno); --constraint必須要寫--
#http://miracle.blog.51cto.com/255044/55315#

--主鍵不可用
create table dept2(
? deptno number(2) primary key,
? dname varchar2(10)
)
disable primary key;


--啟用取消的主鍵,才可以建立外鍵關系,否則報錯。
alter table dept2 enable primary key;

--ORA-02270: 此列列表的唯一或主鍵不匹配
create table table4(
? id varchar2(8),
? deptno number(2) references dept2(deptno)?? --外鍵
);

唯一索引和復合主鍵
e_name varchar2(8) constraint un_dname unique,
name varchar2(10) constraint pt_1 primary key,
表結構最后一行寫
constraint pri_3 primary key(deptno)
--外鍵
deptno constraint pri_4 references dept5(deptno);


--創建復合主鍵
--alter table dept1 add constraint pk_dept primary key(deptno,dname);

alter table dept1 add primary key(deptno,dname);

--創建復合主鍵 禁用狀態。
alter table dept1 add primary key(deptno,dname) disable;

--禁用主鍵,如果有一外鍵依賴于該主鍵,則系統會報錯。
alter table dept1 disable constraint SYS_C002136;? (語法適用于外鍵)
--恢復主鍵
alter table dept1 enable constraint SYS_C002136;
--刪除主鍵
alter table dept1 drop constraint SYS_C002136;??? (語法適用于外鍵)
--刪除主鍵,將外鍵一起刪除。
alter table dept1 drop constraint pk_2 cascade;

create table dept5(
? deptno varchar(8),
? name varchar(8),
? loc varchar(4),
? constraint pri_3 primary key(deptno)? --建立主鍵
);

create table emp5(
? emptno number(4),
? ename varchar2(10),
? job varchar2(10),
? mgr number(4),
? deptno constraint pri_4 references dept5(deptno)? --外鍵
);

create table emp6(
? emptno number(4),
? ename varchar2(10),
? job varchar2(10),
? mgr number(4),
? deptno, constraint pri_5 foreign key(deptno) references dept5(deptno)? --外鍵,逗號不能少。
);

create table emp7(
? emptno number(4),
? ename varchar2(10),
? job varchar2(10),
? mgr number(4),
? deptno varchar(8) , constraint pri_6 foreign references dept5(deptno) on delete cascade? --外鍵,使用delete cascade管理引用完整性
);

#索引組織表# 基于主鍵進行搜索
create table命令與organization index子句一起用于創建索引組織表。
--表及索引.txt--

--抽象數據類型的使用
create type add_type as object(
? street varchar2(10),? --街道名
? city varchar2(10),??? --城市名
? state char(2),??????? --州代碼
? zip?? number????????? --郵編
);
create table customer(
? name varchar2(10),
? address add_type
);
insert into customer values('1',add_type('mystatree','some city','st',10001));

大數據類型使用,clob,blob,bfile。? -->ORACLE埃里森1.txt

3.9.1.表和索引數據字典
?.DBA_TABLES,ALL_TABLES,USER_TABLES? 存放表的基本信息
?.DBA_INDEXS,ALL_INDEXS,USER_INDEXS? 存放索引的基本信息
?.DBA_IND_COLUMN???????????????????? 存放有索引的列的信息
?.ALL_CONSTRAINTS??????????????????? 存放表的限制信息
?.ALL_COLS_COLUMNS?????????????????? 存放表的列的限制信息

查詢當前用戶的基本信息,包括表名,索引名及表空間,存儲參數。
select tablespace_name,table_name,initial_extent,next_extent from all_tables where owner = user;

--查詢當前用戶的限制信息
select owner,constraint_name,table_name from user_constraints;

select search_condition from user_constraints;
SEARCH_CONDITION
--------------------------------------------------------------------------------
sex='男' or sex='女'
sal+comm > 0 and sal+comm < 5000
"ID" IS NOT NULL
"NAME" IS NOT NULL
age between 18 and 60


#創建視圖#
create or replace view viewTitles
as
select title_id,nvl(price,0) price from titles;? --SQL語句--

無法直接指定一個分區數據表的多個分區中的數據時,通過union關鍵字將多個數據表分區聯結。
create or replace view viewStus
as
select * from student partition(east)
union
select * from student partition(west);
--通過視圖來實現,可以簡化SQL命令。
select * from viewStus;

查看用戶創建的視圖信息(user_views)
select * from user_views;

刪除試圖
delete view viewStus;

--查看用戶序列
desc user_sequences;
--查詢簇信息
desc user_clusters;

##簇##

簇表
簇索引
簇表其實就是一組表,是一組共享相同數據塊的多個表組成。將經常一起使用的表組合在一起成為簇可以提高處理效率。
在一個簇中的表就叫做簇表。建立順序是:簇 ->簇表 ->數據 ->簇索引。

唯一索引
組合索引
反向鍵索引:在創建索引時使用reverse關鍵字。
位圖索引:為低基數列創建,bitmap index語句用于創建位圖索引。
?? 優點:減少響應時間,降低空間占用。
?? --無須頻繁的修改造成死鎖--


當索引被創建后,由Oracle自動維護。

create table student8(
? stu_no number(2),
? stu_name varchar2(8)
);

--在指定的字段上創建唯一索引
create unique index idx_stu_no
on student8(stu_no);


insert into student8 values(1,'ANiu');
--ORA-00001: 違反唯一約束條件 (NEWLIFEYHJ.IDX_STU_NO)
insert into student8 values(1,'AZhu');

select * from student8;

數據庫對象
同義詞:數據庫對象的替換名稱,隱藏了對象的名稱和所有者。
序列:生成唯一,連續的整數。
-- 獲取序列的下一個值
-- 序列的第一個值必須通過NextValue來獲得
select seqTest1.NextVal from dual;
-- 獲取序列的當前值
select seqTest1.CurrVal from dual;
視圖:經過定制的表示方式,用于顯示來自一個或多個表的數據。
索引:加快了SQL語句的執行速度。多個列上的創建的索引稱為“組合索引”。
????? 在索引組織表中,數據訪問基于主鍵值。
簇:一組表,這些表擁有公共列,并且一起使用。

create
alter
drop


------------------------2013-5-14------------------------
普通表與索引表的對比
普通表???索引編排表
rowid唯一的標識行?主鍵唯一的標識行
隱式的rowid列??沒有隱式的rowid列
基于rowid的訪問??基于主鍵的訪問
順序掃描返回所有行?完全索引掃描返回所有行,并按主鍵順序排列
普通表可以存儲在簇中?索引組織表不能存儲在簇中
支持分發,復制和分區?不支持分發,復制和分區

區別:rowid與主鍵,順序掃描和索引掃描,簇,分發,復制和分區。

基于函數的索引
基于一個或多個列上的函數或表達式創建的索引
表達式中不能包含聚集函數(sum,count,avg,min,max)
不能在lob,ref或嵌套表列上創建

鍵壓縮索引:compress子句用于創建這種索引。
分區索引
分區索引的類型
本地索引
全局索引

Oracle Class4. 數據庫對象(同義詞,序列,視圖,索引,簇)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 常州市| 绿春县| 句容市| 浮山县| 平顶山市| 丁青县| 昌宁县| 和平县| 合作市| 黔南| 房山区| 晋州市| 股票| 厦门市| 肃宁县| 宁阳县| 宣化县| 南木林县| 太原市| 太湖县| 敦煌市| 光山县| 岐山县| 彭水| 临沭县| 老河口市| 泸溪县| 都江堰市| 刚察县| 拉萨市| 河津市| 买车| 福泉市| 北碚区| 邓州市| 方正县| 东丰县| 交城县| 越西县| 塔河县| 霍城县|