第八章視圖和索引(2課時(shí) 0919)

視圖

利用查詢語句構(gòu)建一個(gè)虛表,可以實(shí)現(xiàn)與實(shí)表相似的操作。也有要叫他是保存的查詢

視圖使用:

1)可以抽取原表部分字段,隱藏一些字段。保證安全性

2)還可以利用視圖對(duì)數(shù)據(jù)進(jìn)行處理,格式可以自定義

3)可以把匯總數(shù)據(jù)存到視圖里。

語法:

create view 視圖名 as 子查詢;

建立最簡(jiǎn)單的視圖:

create view v_dept as select * from dept;

select * from v_dept;

insert into v_dept values(15,'java15','dl');

隱藏部分字段:

create view v_dept_2 as select deptno,dname from dept;

select * from v_dept_2;

視圖可以對(duì)原數(shù)據(jù)表進(jìn)行格式處理

create view v_emp

as

select empno,ename,sal,MONTH(hiredate)

from emp;

select * from v_emp;

把匯總數(shù)據(jù)存到視圖里,方便以后查詢

比如:每個(gè)部門的部門編號(hào)最低,最高工資,平均工資,總工資存在v_emp_count視圖里

create view v_emp_count

AS

select deptno,max(sal),min(sal),avg(sal),sum(sal)

from emp

group by deptno;

select * from v_emp_count;

建立視圖,查詢員工基本信息,部門信息,工資等級(jí)

create view v_fyl

as

(select d.dname,d.loc,e.*,s.grade

from dept d,emp e,salgrade s

where e.deptno=d.deptno AND

e.sal between losal and hisal)

select * from v_fyl

?創(chuàng)建視圖時(shí),在子查詢中使用列的別名

CREATEVIEW? salvu30

? ? ASSELECT? empno EMPLOYEE_NUMBER, ename NAME,

? ? sal SALARY

? ? FROM? emp

? ?WHERE? deptno = 30;

視圖修改

#10號(hào)部門的數(shù)據(jù)存儲(chǔ)到視圖里

createor replace view v_dept_10

as

select * from dept

where deptno=10;

createor replace(沒有則創(chuàng)建一個(gè)新的,有則修改)

視圖上執(zhí)行DML操作規(guī)則:

?您可以通過視圖刪除基表中數(shù)據(jù),只要視圖中不出現(xiàn)以下情況:

–Group 函數(shù);

–GROUP BY 子句;

–DISTINCT 關(guān)鍵字;

?您可以通過視圖修改基表中數(shù)據(jù),只要視圖中不出現(xiàn)以下情況:

–GROUP函數(shù)、GROUP BY子句,DISTINCT關(guān)鍵字;

–使用表達(dá)式定義的列;

?您可以通過視圖向基表插入數(shù)據(jù),只要視圖中不出現(xiàn)以下情況:

–GROUP函數(shù)、GROUP BY子句,DISTINCT關(guān)鍵字;

–使用表達(dá)式定義的列;

–基表中未在視圖中選擇的其它列定義為非空并且沒有默認(rèn)值;

特殊強(qiáng)調(diào)的WITH CHECK OPTION:

WITH CHECK OPTION 建立視圖時(shí)如果追加該選項(xiàng),會(huì)對(duì)視圖操作產(chǎn)生影響,這個(gè)影響就是你向視圖里進(jìn)行的插入操作必須滿足創(chuàng)建視圖時(shí)的where條件

比如視圖創(chuàng)建語句如下:

create or replace view v_dept as select * from dept where deptno=10 ;

沒加 WITH CHECK OPTION;限制時(shí)

insert into v_dept_10 values(13,'java13','hunan');

可以執(zhí)行成功;

加上WITH CHECK OPTION后

create or replace view v_dept as select * from dept where deptno=10 WITH CHECK OPTION;

insert into v_dept_10 values(14,'java14','hunan');

那么你將來insert時(shí),deptno=10

insert into v_dept values(60,'java60','shengyang');

刪除視圖

drop view 視圖名;

索引index

?索引簡(jiǎn)介

–索引是一種特殊的數(shù)據(jù)庫結(jié)構(gòu),可以用來快速查詢數(shù)據(jù)庫表中的特定記錄。索引是提高數(shù)據(jù)庫性能的重要方式。MySQL中,所有的數(shù)據(jù)類型都可以被索引。

索引的設(shè)計(jì)原則

?為了使索引的使用效率更高,在創(chuàng)建索引的時(shí)候必須考慮在哪些字段上創(chuàng)建索引和創(chuàng)建什么類型的索引。索引的設(shè)計(jì)原則如下:

–選擇惟一性索引

為經(jīng)常需要排序、分組和聯(lián)合操作的字段建立索引

–為常作為查詢條件的字段建立索引

–限制索引的數(shù)目

–盡量使用數(shù)據(jù)量少的索引

–盡量使用前綴來索引

–刪除不再使用或者很少使用的索引

索引查詢的時(shí)候會(huì)二分查找 ,建立索引后會(huì)提高查詢的速度,但是可能會(huì)降低添加、刪除、修改的速度

?總結(jié):索引優(yōu)缺點(diǎn)

–索引的優(yōu)點(diǎn)是可以提高檢索數(shù)據(jù)的速度,這是創(chuàng)建索引的最主要的原因;對(duì)于有依賴關(guān)系的子表和父表之間的聯(lián)合查詢時(shí),可以提高查詢速度;使用分組和排序子句進(jìn)行數(shù)據(jù)查詢時(shí),同樣可以顯著節(jié)省查詢中分組和排序的時(shí)間。

–索引的缺點(diǎn)是創(chuàng)建和維護(hù)索引需要耗費(fèi)時(shí)間,耗費(fèi)時(shí)間的數(shù)量隨著數(shù)據(jù)量的增加而增加;索引需要占用物理空間,每一個(gè)索引要占一定的物理空間;增加、刪除和修改數(shù)據(jù)時(shí),要?jiǎng)討B(tài)的維護(hù)索引,造成數(shù)據(jù)的維護(hù)速度降低了。

新建表時(shí)創(chuàng)建索引

前三種重點(diǎn)看,后兩種知道

?創(chuàng)建普通索引

Create table index1(

Id int,

Name varchar(20),

Sex boolean,

foreign key (deptno) refenerces dept(deptno),

Index(id)

);

?創(chuàng)建唯一性索引

Create

table index2(

Id int unique,

Name varchar(20),

Unique index index2_id(id asc|desc)

);

創(chuàng)建全文索引:

只有MyISAM存儲(chǔ)引擎支持全文索引。

Create

table index3(

Id int,

Info varchar(20),

Fulltext index index3_info(info)

)engine=myisam;

?創(chuàng)建單列索引

Create? ?table t_index1(

Id int,

Subject varchar(30),

Index index4_st(subject(10))

);

?創(chuàng)建多列索引

Create

table index5(

Id int,

Name varchar(20),

Sex? char(4),

Index index5_ns(name,sex)

);

?創(chuàng)建空間索引:表的存儲(chǔ)引擎必須是myisam類型(很少用)

Create

table index6(

Id int,

Space geometry not null,

Spatial index index6_sp(space)

)engine=myisam;

在已經(jīng)存在的表上創(chuàng)建索引

?CREATE? INDEX? 索引名? ?ON? 表名? (屬性名? [ (長(zhǎng)度)]? [?ASC | DESC] );

ALTER? TABLE? 表名? ADD?? 索引名(屬性名? [ (長(zhǎng)度)]? [ ASC | DESC]);

刪除索引

?DROP? INDEX? 索引名? ON? 表名 ;

小結(jié)

INDEX 索引,普通的

UNIQUE 唯一索引。 不允許有重復(fù)。??MYSQL主鍵是一種唯一性索引,但它必須指定為“PRIMARY KEY”。

FULLTEXT 是全文索引,用于在一篇文章中,檢索文本信息的。

二分查找。

查詢快,DML慢。

練習(xí)1略

練習(xí)2

-- 1.創(chuàng)建一個(gè)視圖,

-- 通過該視圖可以查詢到工作在NEW YORK和CHICAGO的

-- 員工編號(hào),姓名,部門編號(hào),入職日期。

CREATE or replace VIEW v1 AS

SELECT empno,ename,deptno,hiredate

from emp NATURAL JOIN dept

WHERE loc in ('NEW YORK','CHICAGO')

SELECT * from v1

-- 2.創(chuàng)建一個(gè)視圖,通過該視圖可以查詢到

-- 每個(gè)部門的部門編號(hào),部門名稱及最低工資。

CREATE or REPLACE view v5 AS

SELECT d.deptno,d.dname,min(e.sal) minsal

FROM emp e,dept d

where d.deptno=e.deptno

GROUP BY e.deptno,d.dname

SELECT * from v5

-- 3.通過如上視圖,

-- 查詢每個(gè)部門工資最低的員工姓名及部門名稱

SELECT e.ename,e.deptno,d.dname

from? emp e,v5 d

where e.deptno=d.deptno

and sal=d.minsal

轉(zhuǎn)至:↓↓↓

鏈接:http://m.itdecent.cn/p/49204b784fb9

來源:簡(jiǎn)書

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容