視圖
利用查詢語句構(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)注明出處。