數據庫:視圖,索引,約束

視圖(view):

從一個或幾個基本表中根據用戶須要而作成一個虛表java

1)視圖是虛表,它在存儲時只存儲視圖的定義,而沒有存儲對應的數據sql

2)視圖只在剛剛打開的一瞬間,經過定義從基表中搜集數據,並展示給用戶數據庫

視圖與查詢的區別:數據結構

1)存儲上的區別:視圖存儲爲數據庫設計的一部分,而查詢則不是.數據庫設計

2)更新限制的要求不同函數

3)排序結果:經過sql語句,能夠對一個表進行排序,而視圖則不行.學習

視圖的特色:設計

1)視圖中的數據並不屬於視圖自己,而是屬於基本的表,對視圖能夠像表同樣進行增刪改查操做。code

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基礎知識,能夠戳我一塊兒交流學習!

相關文章
相關標籤/搜索