一疹启、視圖
視圖是虛擬的表辨泳。與包含數(shù)據(jù)的表不一樣,視圖只包含使用時動態(tài)檢索數(shù)據(jù)的查詢竹捉。即檢索出來的數(shù)據(jù)按照視圖定義的格式來進(jìn)行顯示。
(一)創(chuàng)建視圖
- 語法:
CREATE VIEW view_name AS select_statement;
- 舉例:
select stuName,couName,credit from student,course,score
where student.stuId = score.stuId
and score.couId = course.couId;
該查詢涉及到三個表的聯(lián)結(jié)尚骄,where 條件子句块差,比較復(fù)雜【笳桑可以使用視圖來簡化該操作憨闰。
創(chuàng)建視圖:
create view stuScore as
select stuName,couName,credit from student,course,score
where student.stuId = score.stuId
and score.couId = course.couId;
直接對視圖進(jìn)行select語句查詢:
select * from stuScore;
直接對視圖進(jìn)行select語句查詢和之前的聯(lián)表查詢效果一樣,但更簡潔需五。
對視圖進(jìn)行條件查詢:
select * from stuScore where couName = 'c#';
對視圖進(jìn)行分組操作:
select stuName cast(sum(credit) as decimal(9,3))
as totalScore from stuScore group by stuName;
- 注意
創(chuàng)建視圖時鹉动,若視圖存在,可以先使用drop再用create宏邮,也可以直接使用create or replace view泽示。如果創(chuàng)建的視圖不存在,則第二種方法會創(chuàng)建一個視圖蜀铲,如果要創(chuàng)建的視圖存在边琉,則第二種方法會替換掉原有的視圖属百。
視圖中的數(shù)據(jù)是否可以更新记劝,視情況而定。
若視圖的定義中包含以下操作族扰,則不能通過視圖更新數(shù)據(jù):
- 分組(group by 和 having)
- 聯(lián)結(jié)
- 子查詢
- 并
- 聚集函數(shù)
- Distinct
- 導(dǎo)出(計(jì)算)列
(二)刪除視圖
語法:
DROP VIEW view_name;
(三)使用視圖的好處
- 視圖能簡化用戶操作
- 視圖使用戶能以多種角度看待同一數(shù)據(jù)
- 視圖對重構(gòu)數(shù)據(jù)庫提供了一定程度的邏輯獨(dú)立性
- 視圖能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)
- 適當(dāng)?shù)睦靡晥D可以更清晰地表達(dá)查詢
二厌丑、索引
索引是一種特殊的數(shù)據(jù)庫結(jié)構(gòu)定欧,可以用來快速查詢數(shù)據(jù)庫表中的特定記錄。索引是提高數(shù)據(jù)庫性能的重要方式怒竿。MySQL中砍鸠,所有的數(shù)據(jù)類型都可以被索引。MySQL的索引包括普通索引耕驰、惟一性索引爷辱、全文索引、單列索引朦肘、多列索引和空間索引等饭弓。
索引的優(yōu)點(diǎn)是可以提高檢索數(shù)據(jù)的速度,這是創(chuàng)建索引的最主要的原因媒抠;索引的缺點(diǎn)是創(chuàng)建和維護(hù)索引需要耗費(fèi)時間弟断,耗費(fèi)時間的數(shù)量隨著數(shù)據(jù)量的增加而增加。
(一)創(chuàng)建索引
- 創(chuàng)建表時創(chuàng)建索引
CREATE TABLE 表名 (屬性名 數(shù)據(jù)類型 [完整性約束條件],
屬性名 數(shù)據(jù)類型 [完整性約束條件],...屬性名 數(shù)據(jù)類型
[UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY
[別名](屬性名1 [(長度)] [ASC | DESC]));
- 在已經(jīng)存在的表上創(chuàng)建索引
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名
ON 表名 (屬性名[(長度)] [ASC | DESC]);
- 用ALTER TABLE語句來創(chuàng)建索引
ALTER TABLE 表名 ADD [ UNIQUE | FULLTEXT | SPATIAL ] INDEX
索引名(屬性名 [(長度)] [ASC | DESC]);
(二)刪除索引
DROP INDEX 索引名 ON 表名 ;
(三)常見問題及解答
- MySQL中索引趴生、主鍵和惟一性的區(qū)別是什么?
索引建立在一個或幾個字段上阀趴,建立了索引后,表中的數(shù)據(jù)就按照索引的一定規(guī)則排列。這樣可以提高查詢速度苍匆。
主鍵是表中數(shù)據(jù)的唯一標(biāo)識刘急。不同的記錄的主鍵值不同。在建立主鍵時,系統(tǒng)會自動建立一個唯一性索引锉桑。
唯一性是建立在表中一個或者幾個字段上排霉。其目的是為了對于不同的記錄,具有唯一性的字段的值是不同的民轴。
- 表中建立了索引以后,導(dǎo)入大量數(shù)據(jù)為什么會很慢?
對已經(jīng)建立了索引的表中插入數(shù)據(jù)時攻柠,插入一條數(shù)據(jù)就要對該記錄按索引排序。因此后裸,導(dǎo)入大量數(shù)據(jù)的時候速度會很慢瑰钮。解決這種情況的辦法是,在沒有任何索引的情況插入數(shù)據(jù)微驶,然后建立索引浪谴。