1 資料庫理論
1NF :第一範式。如果關係模式R的所有屬性的範圍都是不可再分解的值,則稱R 屬於第一範式
第一範式的模式要求屬性值不可再分裂成更小部分,即屬性項不能使屬性項組合或由組屬性群組成
2NF :第二範式。如果關係模式R為第一範式,並且R中每一個非主屬性完全函數依賴於R的某個候選索引鍵,則稱R為第二範式模式。
如果某個資料庫模式中每個關係模式都是第二範式的,則稱該資料庫模式屬於第二範式的資料庫模式。
3NF :第三範式。如果關係模式R是第二範式,則每個非主屬性都不傳遞依賴於R的候選索引鍵,則稱R是第三範式的模式。如果某個資料庫模式的每個關係模式
都是第三範式,則稱為3NF資料庫模式
BCNF :BC範式。如果關係模式R是第一範式,且每個屬性都不傳遞依賴於R的候選索引鍵,那麼稱R為BCNF模式
4NF:第四範式。設R是一個關係模式,D是R上的多值依賴集合。如果D中成立非平凡多值依賴X-》-》Y X必是R的超鍵,稱R為第四範式的模式
關係R(s,d,m)
2 預存程序和函數的區別是什嗎?
預存程序是使用者定義的一系列SQL語句集合,涉及特定表或其他對象的任務,使用者可以調用預存程序。
函數通常是資料庫已定義的方法,它接受函數並返回某種類型的值,並且不涉及特定使用者表
3 什麼是資料庫事務?
資料庫事務 指多個邏輯工作單元執行的一系列操作,這些操作要麼全做要麼全不做,是一個不可分割的工資單元。
事務的開始和結束可以有使用者顯示控制。如果使用者沒有顯示地定義事務,則由DBMS按預設規定自動劃分事務。
事務具有:原子性,一致性,獨立性及持久性 等特點
4 遊標的作用是什麼,如何知道遊標已經到了最後?
遊標用於定位結構集的行。通過判斷全域變數@@FETCH_STATUS可以判斷其是否到了最後。通常此變數不等於0表示出錯或到了最後。
5 觸發器分為事前觸發和事後觸發,這兩種觸發有何區別?語句級觸發和行級觸發有何區別?
事前---運行於觸發事件發生以前
事後--運行於觸發事件發生之後
語句級--語句執行前或後執行
行級觸發--所影響的每一行觸發一次
6 叢集索引和非叢集索引之間的區別
叢集索引的解釋是:叢集索引的順序就是資料的實體儲存體順序,而對非叢集索引的解釋是索引順序與資料物理排列順序無關。正因為如此,所以一個表最多隻能有一個
叢集索引。
在sql server中,索引是通過二叉樹的資料結構來描述的,我們可以這麼理解叢集索引:索引的分葉節點就是資料節點。而非叢集索引的分葉節點仍然是索引節點,只不過
有一個指標指向對應的資料區塊。
叢集索引確定表中資料的物理順序。叢集索引類似電話本,後者按姓名排列資料,由於叢集索引規定資料在表中的實體儲存體順序,因此一個表只能包含一個叢集索引,
但該索引可以包含多個列,像電話本按姓氏和名字進行組織一樣。
使用非叢集索引,非叢集索引與課本中的索引類似。資料存放區在一個地方,索引儲存在另一個地方,索引帶有指標指向資料的儲存位置。索引中的項目按索引
索引值叢集索引,則無法保證這些行具有任何特定的順序
常用聚集合函式(Aggregation function)或內建函式(Build-in function)
| 函數名 |
功能 |
| COUNT |
對元組計數 |
| TOTAL |
求總和 |
| MAX |
求最大值 |
| MIN |
求最小值 |
| AVG |
求平均值 |
關係模式可以形式化地表示為: R(U,D,DOM,F)R 關係名U 組成該關係的屬性名稱集合D 屬性群組U中屬性所來自的域DOM 屬性向域的映象集合F 屬性間的資料依賴關係集合
關係的三類完整性條件約束
實體完整性
參照完整性
使用者定義的完整性
實體完整性和參照完整性: 關聯式模式必須滿足的完整性條件約束條件 稱為關係的兩個
不變性,應該由關係系統自動支援使用者定義的完整性: 應用領域需要遵循的約束條件,體現了具體領域中的語義約束
設
F是基本關係
R的一個或一組屬性,但不是關係
R的碼。如果F與基本關係
S的主碼Ks相對應,則稱F是基本關係
R的外碼基本關係
R稱為參照關係(Referencing Relation)基本關係
S稱為被參照關係(Referenced Relation) 或目標關係(Target Relation)
規則2.2 參照完整性規則 若屬性(或屬性群組)
F是基本關係
R的外碼它與基本關係
S的主碼Ks相對應(基本關係
R和
S不一定是不同的關係),則對於
R中每個元組在
F上的值必須為:或者取空值(
F的每個屬性值均為空白值)或者等於
S中某個元組的主碼值
decimal(M,D);
M --- 表示小數點前與後的位元之和,D表示小數點後有多少位.......
若D=0則表示為整數.....M就全為整數位
identity 表示該列是一個識別欄位,設定了identity 該列的值會根據初始值和增量自動在插入資料的時候添加的。
Numeric(10,2) 指欄位是數字型,長度為10 小數為兩位的
| 資料類型 |
含義 |
| CHAR(n) |
長度為n的定長字串 |
| VARCHAR(n) |
最大長度為n的變長字串 |
| INT |
長整數(也可以寫作INTEGER) |
| SMALLINT |
短整數 |
| NUMERIC(p,d) |
定點數,由p位元字(不包括符號、小數點)組成,小數後面有d位元字 |
| REAL |
取決於機器精度的浮點數 |
| Double Precision |
取決於機器精度的雙精確度浮點數 |
| FLOAT(n) |
浮點數,精度至少為n位元字 |
| DATE |
日期,包含年、月、日,格式為YYYY-MM-DD |
| TIME |
時間,包含一日的時、分、秒,格式為HH:MM:SS |
v語句格式 SELECT [ALL|DISTINCT] <目標列運算式> [,<目標列運算式>] …FROM <表名或視圖名>[, <表名或視圖名> ] …[ WHERE <條件運算式> ][ GROUP BY <列名1> [
HAVING <條件運算式> ] ][ ORDER BY <列名2> [ ASC|DESC ] ];
select * from tab where tname like '\_%' escape '\';
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
_test TABLE
換碼字元escape將萬用字元_轉換為一般字元
謂詞: IS NULL 或 IS NOT NULL“IS” 不能用 “=” 代替
ORDER BY子句可以按一個或多個屬性列排序升序:ASC;降序:DESC;預設值為升序當排序列含空值時ASC:排序列為空白值的元組最後顯示DESC:排序列為空白值的元組最先顯示
聚集合函式:計數COUNT([DISTINCT|ALL] *)COUNT([DISTINCT|ALL] <列名>)計算總和SUM([DISTINCT|ALL] <列名>) 計算平均值AVG([DISTINCT|ALL] <列名>)最大最小值 MAX([DISTINCT|ALL] <列名>) MIN([DISTINCT|ALL] <列名>)