什么是索引?
提起索引,應(yīng)該不會感到陌生,若說它就是目錄,大概都知道了,數(shù)據(jù)庫的索引與書的目錄很相似,都叫index.書的內(nèi)容相當(dāng)于數(shù)據(jù)庫表中的數(shù)據(jù),書的目錄通過頁碼指向書的內(nèi)容,同樣,索引也記錄了表中的關(guān)鍵值,提供了指向表中行的指針.書的目錄使讀者很快的找到想看的內(nèi)容,而不必翻看書的每一頁,索引使得數(shù)據(jù)庫應(yīng)用程序能夠不掃描全表而找到想要的數(shù)據(jù).
索引是不是多多益善?
索引可以創(chuàng)建在一列或多列的組合上,也可以在數(shù)據(jù)庫表的多個列上建立不同的索引,但這些列應(yīng)該是經(jīng)常作為查詢條件的列.需要指出的是,并不是表上的索引越多越好,在數(shù)據(jù)庫設(shè)計過程中,還是需要為表選擇一些合適的索引。寧缺勿爛,這是建立索引時的一個具體選擇。在理論上,雖然一個表可以設(shè)置無限的索引,但表中的索引越多,維護(hù)索引所需要的開銷也就越大。每當(dāng)數(shù)據(jù)表中記錄有增加、刪除、更新變化的時候,數(shù)據(jù)庫系統(tǒng)都需要對所有索引進(jìn)行更新。
索引的分類
索引可以分為三類:聚集索引(clustered index),非聚集索引,唯一性索引(unique index).根據(jù)索引字段組成又有復(fù)合索引的說法,復(fù)合索引可以是唯一索引也可以不是唯一索引.一個表上最多創(chuàng)建一個聚集索引和249個非聚集索引.
創(chuàng)建索引的條件
(1)為經(jīng)常出現(xiàn)在關(guān)鍵字orderby、group by、distinct后面的字段,建立索引。
(2)在union等集合操作的結(jié)果集字段上,建立索引。
(3)為經(jīng)常用作查詢選擇的字段,建立索引。
(4)在經(jīng)常用作表連接的屬性上,建立索引。
(5)考慮使用索引覆蓋。對數(shù)據(jù)很少被更新的表,如果用戶經(jīng)常只查詢其中的幾個字段,可以考慮在這幾個字段上建立索引,從而將表的掃描改變?yōu)樗饕膾呙琛?/p>
創(chuàng)建索引的限制
(1)限制索引數(shù)目。
(2)唯一性太差的字段不適合單獨創(chuàng)建索引;
(3)更新頻繁的字段不適合創(chuàng)建索引;
(4)不會做為查詢條件的字段不創(chuàng)建索引
存儲過程和觸發(fā)器都是一組SQL語句集合,他們在數(shù)據(jù)庫開發(fā)過程中,在對數(shù)據(jù)庫的維護(hù)和管理等任務(wù)中,以及在維護(hù)數(shù)據(jù)庫參照完整性等方面,具有不可替代的作用.而觸發(fā)器是一種特殊的存儲過程,存儲過程獨立于表,具有訪問和操縱數(shù)據(jù)庫數(shù)據(jù)的功能,使應(yīng)用程序執(zhí)行效率得到進(jìn)一步提高.觸發(fā)器也是T_SQL語句的集合,它與表密切結(jié)合,實現(xiàn)表中更為復(fù)雜的業(yè)務(wù)規(guī)則.
存儲過程是以一個名字存儲在數(shù)據(jù)庫中的,經(jīng)過預(yù)編譯的T_SQL語句集合,可以獨立執(zhí)行或通過應(yīng)用程序的調(diào)用來執(zhí)行.
觸發(fā)器是不由用戶直接調(diào)用的,而是在對表或視圖中數(shù)據(jù)進(jìn)行update,insert或者delete操作時自動執(zhí)行.一個表或視圖可以有多個觸發(fā)器,每個觸發(fā)器可以包含復(fù)雜的SQL語句.數(shù)據(jù)庫表之間的引用完整性約束,除了可以采用主鍵和外鍵的對應(yīng)約束來實現(xiàn)之外,還可以使用觸發(fā)器,從而實現(xiàn)更復(fù)雜的用戶定義完整性約束.
字符函數(shù)
這個函數(shù)一般接收字符作為參數(shù),并且可以返回字符或數(shù)字
其中最常用有以下兩個函數(shù)
1.CONCAT函數(shù)
主要用于字符串的連接,具體語法如下
CONCAT(c1,c2)
接收兩個參數(shù),將第二個參數(shù)連接到第一個參數(shù)的末尾,假如第二個參數(shù)是NULL,
則函數(shù)返回第一個參數(shù),假如第一個參數(shù)是NULL,則參數(shù)返回第二個參數(shù),
假如都為NULL,則函數(shù)返回NULL
為商品價格添加元單位示例如下:
2.NVL函數(shù)
這個函數(shù)主要用于函數(shù)替換
NVL(e1,e2)
接收兩個參數(shù),假如第一個參數(shù)不為NULL時,函數(shù)返回第一個參數(shù),
假如第一個參數(shù)為NULL時,函數(shù)返回第二個參數(shù)
具體的使用示例如下:
查詢商品表的相關(guān)信息,對沒有詳細(xì)介紹的商品默認(rèn)設(shè)置顯示“暫無詳細(xì)描述”
可使用暫無詳細(xì)描述來代替NULL
字符常用函數(shù)還有很多,希望大家能在我的基礎(chǔ)上評論補充
SQL語言是一種高級的非過程化的查詢語言,用戶使用它主要進(jìn)行數(shù)據(jù)庫的操作
可以把SQL語言看成是客戶端與服務(wù)器端溝通的一個工具,用來存取,查詢和更新,關(guān)系數(shù)據(jù)庫系統(tǒng)
Insert語句
INSERT語句的語法結(jié)構(gòu)如下:
table值的是要插入數(shù)據(jù)的表的表名,Column指的是要插入數(shù)據(jù)的列名,Value指的是要插入的具體數(shù)據(jù)值
例如往會員表中插入一個新的會員數(shù)據(jù),可以這樣添加:
前者的優(yōu)點是可以指定哪些字段添加哪些數(shù)據(jù),缺點是表名后面的小括號中的字段名需要和Value值相對照
后者的優(yōu)點是書寫簡單,缺點是要把所有的字段都在Value中進(jìn)行賦值
當(dāng)需要插入數(shù)據(jù)包含有空值的時候,一般使用第一種方法,而第二種方法進(jìn)行插入需要使用NULL關(guān)鍵字進(jìn)行填充
假如插入的數(shù)據(jù)包含時間,而且時間是當(dāng)前的時間,
假如插入的是時間,并且時間是某個具體的時間,我們可以將上述的語句進(jìn)行修改如下:
以上操作的都是單行的數(shù)據(jù),而下面的操作是多行的數(shù)據(jù)
插入多行數(shù)據(jù)示例如下:
UPDATE語句
UPDATE語句結(jié)構(gòu)如下:
如初始化所有會員密碼:
按條件更新:
做更新操作的時候,WHERE條件一般選擇類似主鍵這樣有唯一性約束的字段,除非特殊情況,
否則的話會引起意想不到的誤操作,比如更新用戶表時以name作為條件的話,就十分危險,
因為名字是可以重復(fù)的
Select語句
我們對數(shù)據(jù)庫做得最多的操作是數(shù)據(jù)檢索
select語句就顯得極其重要
其中最簡單的查詢實例如下:
*指的是所有列
而查詢所有VIP數(shù)據(jù)如下:
查詢兩個條件同時成立的示例如下:
查詢兩個條件成立其中一個,示例如下:
查詢條件為空的示例如下:
當(dāng)要查詢會員中所有姓李的會員時,需要用到模糊查詢:
% 能匹配0到多個字符
_ 能任意匹配單個字符
查詢商品表中價格在300-400之間的商品數(shù)據(jù);
而查詢會員表中張三、李四、王五的信息方法如下:
使用別名查詢:
其中查詢中可能需要對查詢的結(jié)果進(jìn)行排序,其結(jié)構(gòu)如下:
查詢商品表,按上架時間進(jìn)行排序:
如果想去掉查詢結(jié)果中的重復(fù)數(shù)據(jù),可以使用Distinction關(guān)鍵字,如下
Delete語句
語法結(jié)構(gòu)如下
其中的table 和 condition在上面已經(jīng)有提及
刪除示例如下
在實際操作中我們應(yīng)該使用假刪除,就是再增加一個狀態(tài)(一般為status)的字段
在刪除錯誤之后,我們可以用 ROLLBACK來回滾事務(wù)
摘要: 管理數(shù)據(jù)完整性一 學(xué)習(xí)目標(biāo) 1.實現(xiàn)數(shù)據(jù)完整性約束 2.管理完整性約束 3.從數(shù)據(jù)字典中獲取約束信息二 保證數(shù)據(jù)完整性的方法 1.應(yīng)用程序代碼控制 2.觸發(fā)器控制 3.聲明完整性約束三 約束的類型 (見圖) 1.not null (不能為空) ... 閱讀全文