視圖(view):
從一個或幾個基本表中根據使用者需要而做成一個虛表
1)視圖是虛表,它在存儲時隻存儲視圖的定義,而沒有存儲對應的資料
2)視圖隻在剛剛打開的一瞬間,通過定義從基表中搜集資料,并展現給使用者
視圖與查詢的差別:
1)存儲上的差別:視圖存儲為資料庫設計的一部分,而查詢則不是.
2)更新限制的要求不一樣
3)排序結果:通過sql語句,可以對一個表進行排序,而視圖則不行.
視圖的特點:
1)視圖中的資料并不屬于視圖本身,而是屬于基本的表,對視圖可以像表一樣進行增删改查操作。
2)視圖不能被修改,表修改或者删除後應該删除視圖再重建。
3)視圖可以被嵌套,一個視圖中可以嵌套另一個視圖。
4)視圖的數量沒有限制,但是命名不能和視圖以及表重複,具有唯一性。
視圖的功能:
1)将使用者限定在表中的特定行上。
2)将使用者限定在特定列上。
3)将多個表中的列聯接起來,使它們看起來象一個表。
4)聚合資訊而非提供詳細資訊,例如顯示一個列的和或列的最大值和最小值。
視圖的優點:
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 ‘%…%’;
-
like語句不要以通配符開頭;
對于LIKE:在以通配符%和_開頭作查詢時,MySQL不會使用索引。
-
不要在列上進行運算;
索引列不能是表達式的一部分,也不是是函數的參數。
-
盡量不要使用NOT IN、<>、!= 操作;
應盡量避免在 where 子句中使用!=或<>操作符,否則将引擎放棄使用索引而進行全表掃描。
-
or條件;
用 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基礎知識,可以戳我一起交流學習!