今天著重整理一下sql server的理論基礎
一、各概念的自我理解(參考:
定義都比較長,面試時也不可能記的全,要有理解,試著用一兩句話概括一下各個概念
1、觸發器:一種根據條件(事件)執行的儲存過程,在專案中沒用過,一般業務邏輯用程式來控制,資料庫盡量只使用資料儲存,不進行業務邏輯。
2、儲存過程:一段預編譯的sql語句,因為編譯過,所以執行起來比普通sql快。在專案中主要用於一連串事務性的操作
3、索引:假設一本字典是按拼音排序,目錄有拼音和筆劃。索引就像目錄,聚焦索引就像拼音索引,是物理上有序的,比如我要查l開頭的,就知道大概在字典的中部,一張表只有乙個聚焦索引,一般是主鍵。非聚焦索引就像筆劃目錄,也可以很方便查到相應資料,但物理上是無序的。索引會增加儲存空間和降低資料修改的速度,但一般業務上都是對查詢的速度要求高,對編輯的速度沒那麼敏感,而且現在儲存裝置**低廉,空間不是問題。
4、約束:資料庫有很多約束功能,非空、唯
一、主外來鍵、check、觸發器等。一般除了必要的一些約束,盡量讓資料庫只進行資料的訪問,不進行太多業務上的邏輯處理。因為業務邏輯不斷變化,各專案也可能要共用資料庫。
5、事務:有acid特性(原子性、一致性、隔離性、永續性),
要麼全成功要麼全失敗,一般用於轉賬、出入庫等
6、鎖:鎖定庫、表、字段,有各種鎖(表鎖、行鎖、共享鎖、更新鎖、排它鎖等),比較細,有機會再仔細研究一下。專案中常用到的是with(nolock),這樣不受併發修改的鎖影響,但資料可能不準確。
7、檢視:把多表連線成一張表。專案中如果有固定的多表連線,可以做成檢視,一般還是在程式中處理。
8、游標:像指標一樣對查詢結果集進行一行一行的處理,一行處理完指向下一行。效能比較差,有時逐條處理資料時會用到。ado.net的datareader就是相當於乙個向前唯讀的游標。只不過datareader不過把結果集預先全查出來,所以對大資料效能比較好,而指標是要把結果集先查出來,再對結果集一行行處理(不知理解的對不對)
9、null:declare @i=int; 此時@i的值是null,而不像c#是0。。。有時沒注意會被坑。sql的可空型別對應的c#是,另外,null和''(空字串)是不一樣的,而且只能用 is null來判斷,=null是無效的(但不報錯。。。也是乙個大坑),為了保險,專案中經常用 isnull(xx,'')='' 之類的進行判斷
10、主鍵外來鍵:由於主鍵一般聚焦索引,常用自增長id作主鍵,插入記錄後可用@@identity獲取插入新行的主鍵值。外來鍵一般用於一對多,比如乙個讀者,其名下的借書記錄。
二、各函式
太基本的函式就不列了,整理一些比較常用的
1、newid():獲取guid,配合abs(checksum(newid())),可以在迴圈中獲取隨機數
2、rand():獲取隨機數,但在迴圈中只會產生乙個,要用newid()
3、字串處理函式:參考(
selectascii('
a') --
97,字元轉成ascii
select
ascii('
1') --
49select
ascii(1) --
49,數字可以不加單引號
select
char(97) --
a,ascii轉成字元
select
str(12,2) --
'12',數字轉字串
select
str(12,1) --
*,不足的以*表示
select
str(12,3) --
' 12',超出的前補0
select
str(12) --
' 12',預設10位
select
ltrim('
a bc
') --
'a bc ',去左端空格
select
rtrim('
a bc
') --
' a bc',去右端空格
select
left('
abc',2) --
abselect
right('
abc',2) --
bcselect
right('
0000'+
'123
',4) --
0123,用於前補0
select
substring('
abcd
',1,2) --
ab,【前一引數】包含第1位,取【後一引數】個
select
substring('
abcd
',5,2) --
'',超過為空
select
substring('
abcd
',-1,2) --
'',負數為空
select
substring('
abcd
',4,2) --
'd',取完為止
select
charindex('
a','
abcd
') --
1,子串出現位置,從1開始
select
charindex('
e','
abcd
') --
0,注意:c#有indexof,js有indexof,找不到都為-1,sql則是為0
select
patindex('
%a%','
abcd
') --
1,子串出現位置,前後必須有百分號
select
patindex('
a','
abcd
') --
0,前後必須有百分號否則返回0
select
quotename('
abc','') --
[abc],返回被特定字元括起來的字串,預設
select
quotename('
abc','
{}') --
select
replicate('
ab',2) --
abab,重複次數
select
replicate('
ab',0) --
'',0為''
select
replicate('
ab',-
2) --
null,負數為null
select
reverse('
abc') --
cba,顛倒順序
select
reverse(12) --
21,顛倒順序
select
replace('
abc','
ab','
ab') --
abcselect
space(1) --
' ',指定長度空白符
select
space(0) --
''select
space(-
1) --
null
select
stuff('
abcd
',1,2,'
x') --
xcdselect
stuff('
abcd
',5,2,'
x') --
null
select
stuff('
abcd
',-1,2,'
x') --
null
select
stuff('
abcd
',2,-
1,'x
') --
null
Cisco 筆試準備
一共70道題,全部是單選題,答對加1分,答錯扣0.5分,不答不加分也不扣分。試題一共分為4部分 第一部分是network,第二部分是os,第三部分跟職位有關,我的是test,第四部分是logic。第一部分 network 以下是別人寫的 network部分,和ccna差不多。osi 7layer m...
c 筆試題準備
1.兩個任意長度的正數相減,這兩個正數可以帶小數點,也可以是整數,請輸出結果。輸入的字串中,不會出現除了數字與小數點以外的其它字元,不會出現多個小數點以及小數點在第乙個字元的位置等非法情況,所以考生的程式中無須考慮輸入的數值字串非法的情況。詳細要求以及約束 1.輸入均為正數,但輸出可能為負數 2.輸...
百度筆試準備
分箱 分箱方法是一種簡單常用的預處理方法,通過考察相鄰資料來確定最終值。所謂 分箱 實際上就是按照屬性值劃分的子區間,如果乙個屬性值處於某個子區間範圍內,就稱把該屬性值放進這個子區間所代表的 箱子 內。把待處理的資料 某列屬性值 按照一定的規則放進一些箱子中,考察每乙個箱子中的資料,採用某種方法分別...