天天看點

資料庫:視圖,索引,限制

視圖(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基礎知識,可以戳我一起交流學習!