從一個或幾個基本表中根據用戶須要而作成一個虛表java
1)視圖是虛表,它在存儲時只存儲視圖的定義,而沒有存儲對應的數據
2)視圖只在剛剛打開的一瞬間,經過定義從基表中搜集數據,並展示給用戶sql
視圖與查詢的區別:數據庫
1)存儲上的區別:視圖存儲爲數據庫設計的一部分,而查詢則不是.
2)更新限制的要求不同
3)排序結果:經過sql語句,能夠對一個表進行排序,而視圖則不行.數據結構
視圖的特色:數據庫設計
1)視圖中的數據並不屬於視圖自己,而是屬於基本的表,對視圖能夠像表同樣進行增刪改查操做。
2)視圖不能被修改,表修改或者刪除後應該刪除視圖再重建。
3)視圖能夠被嵌套,一個視圖中能夠嵌套另外一個視圖。
4)視圖的數量沒有限制,可是命名不能和視圖以及表重複,具備惟一性。函數
視圖的功能:學習
1)將用戶限定在表中的特定行上。
2)將用戶限定在特定列上。
3)將多個表中的列聯接起來,使它們看起來象一個表。
4)聚合信息而非提供詳細信息,例如顯示一個列的和或列的最大值和最小值。設計
視圖的優勢:code
1)視圖着重於特定數據。
2)簡化數據的操做,易維護。
3)視圖能夠限定查詢數據。排序
視圖的建立 :
建立視圖:
語法:
CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition;
更新視圖:
語法:
CREATE OR REPLACE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition;
刪除視圖:
語法:
DROP VIEW view_name
索引的分類:
1)普通索引
這是最基本的索引,它沒有任何限制。普通索引(由關鍵字KEY或INDEX定義的索引)的惟一任務是加快對數據的訪問速度。
建立方式:
CREATE INDEX indexName ON mytable(username(length));
若是是CHAR,VARCHAR類型,length能夠小於字段實際長度;若是是BLOB和TEXT類型,必須指定 length,下同。
ALTER mytable ADD INDEX [indexName] ON (username(length))
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );
DROP INDEX [indexName] ON mytable;
2)惟一索引
它與前面的普通索引相似,不一樣的就是:普通索引容許被索引的數據列包含重複的值。而惟一索引列的值必須惟一,但容許有空值。若是是組合索引,則列值的組合必須惟一。
建立方式:
CREATE UNIQUE INDEX indexName ON mytable(username(length))
ALTER mytable ADD UNIQUE [indexName] ON (username(length))
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );
3)主鍵索引
它是一種特殊的惟一索引,不容許有空值。一個表只能有一個主鍵。
通常是在建表的時候同時建立主鍵索引:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) );
主鍵索引和惟一索引的區別:
①主鍵必定會建立一個惟一索引,可是有惟一索引的列不必定是主鍵;
②主鍵不容許爲空值,惟一索引列容許空值;
③一個表只能有一個主鍵,可是能夠有多個惟一索引;
④主鍵能夠被其餘表引用爲外鍵,惟一索引列不能夠;
⑤主鍵是一種約束,而惟一索引是一種索引,是表的冗餘數據結構,二者有本質的差異
4)組合索引
爲了進一步提升MySQL的效率,就要考慮創建組合索引。組合索引的使用要遵照「最左前綴」原則'。
索引的優勢:
1.大大加快數據的檢索速度;
2.建立惟一性索引,保證數據庫表中每一行數據的惟一性;
3.加速表和表之間的鏈接;
4.在使用分組和排序子句進行數據檢索時,能夠顯著減小查詢中分組和排序的時間。
索引的缺點:
1.索引須要佔用數據表之外的物理存儲空間
2.建立索引和維護索引要花費必定的時間
3.當對錶進行更新操做時,索引須要被重建,這樣下降了數據的維護速度。
索引的實現方式:
1)B+樹
用這個樹的目的和紅黑樹差很少,也是爲了儘可能保持樹的平衡;
2)散列索引
就是經過散列函數來定位的一種索引,不過不多有單獨使用散列索引的,反而是散列文件組織用的比較多。
3)位圖索引
位圖索引是一種針對多個字段的簡單查詢設計一種特殊的索引,適用範圍比較小,只適用於字段值固定而且值的種類不多的狀況,而且只有在同時對多個這樣的字段查詢時才能體現出位圖的優點。
索引使用:
對於LIKE:在以通配符%和_開頭做查詢時,MySQL不會使用索引。
索引列不能是表達式的一部分,也不是是函數的參數。
應儘可能避免在 where 子句中使用!=或<>操做符,不然將引擎放棄使用索引而進行全表掃描。
用 or 分割開的條件, 若是 or 前的條件中的列有索引, 然後面的列中沒有索引, 那麼涉及到的索引都不會被用到。
1)主鍵約束: 要求主鍵列數據惟一,而且不容許爲空。
格式爲:
alter table 表格名稱 add constraint 約束名稱 增長的約束類型 (列名)
2)惟一約束 :要求該列惟一,容許爲空,但只能出現一個空值。
格式:
alter table 表名 add constraint 約束名稱 約束類型(列名)
3)檢查約束: 對該列數據的範圍、格式的限制(如:年齡、性別等)
格式:
alter table 表名稱 add constraint 約束名稱 增長的約束類型 (列名)
4)默認約束 : 該數據的默認值,如在數據庫裏有一項數據不少重複,能夠設爲默認值。
格式:
alter table 表名稱 add constraint 約束名稱 約束類型 默認值) for 列名
5)外鍵約束:須要創建兩表間的關係並引用主表的列
格式:
alter table 表名 add constraint 約束名稱 約束類型 (列名) references 被引用的表名稱 (列名)
謝謝你們閱讀,若是想要知道更多java基礎知識,能夠戳我一塊兒交流學習!