20080927
SQL 入門班 邱梓君
先考70-431 再考 70-443 及 70-444
Lab:執行第一次啟動
開始 --> 所有程式 --> Microsoft SQL Server 2005 --> SQL Server Management Studio --> 連接
Notes:
Microsoft SQL Server Management Studio 只是圖形介面不是SQL Server, 關閉這個介面不是關閉SQL Server
要使用指令的話可以點選''新增查詢''
為了避免各產品之間的SQL語法不相容, 因此由ANSI( American National Standard Institute 美國國家標準局 ) 制定出SQL-92, 定義出SQL 的關鍵字與語法標準, 以提高各家產品在SQL語法上的相容性. 但正因SQL-92 為統一標準, 自然無法發揮各家資料庫其特殊的長處, 因此業界真正使用的SQL語言, 通常是包含SQL-92 所定義的標準內容, 另外再加上自家資料庫額外擴充的功能.
SQL語法( Structured Query Language ) 並不是SQL Server
SQL語言不能獨立執行.
Tel.xls.exe 隨身碟病毒( 在task manager 會看到alg的process )
SQL語言的功能分類
DDL( Data Definition Language 資料定義語言 )
DML( Data manipulation Language 資料處理語言)
DCL( Data Control Language 資料控制語言 )
Lab:新增資料庫
開啟Microsoft SQL Server Management Studio
以圖形介面的方式
展開本機 --> 資料庫 --> 滑鼠右鍵 --> 新增資料庫 --> 輸入資料庫名稱 --> 確定
建立完成( 可以參考右邊的資料庫會多出NewNew 資料庫)
如果要刪除資料庫, 請於NewNew資料庫上 --> 滑鼠右鍵 --> 刪除 --> 確定
以命令提示字元的方式
點選''新增查詢''
輸入CREATE DATABASE NewNew --> 點選 '執行'
輸入DROP DATABASE NewNew -->點選 ' 執行'
使用 指令的方式建立資料庫要在資料庫--> 滑鼠右鍵 --> 重新整理 才會看到成果
如果要執行特定指令, 要先選取某一個指令, 再去按執行, 不然會從頭開始執行.
資料庫的名稱看起來沒有分大小寫
每個資料庫包含
MDF 1 ( SQL Server Database Primary Data File只能有一個)
NDF 0 ~ no_limit
LDF 1 ~ no_limit ( SQL Server Database Transaction Log File 內容為Log 檔, 至少會有一個為了還原使用, 所以Log檔重要性大於資料庫)
解決字型過小的問題
工具 --> 選項 --> 環境 --> 字型和色彩 --> 選取自訂的大小
Notes:
在資料庫內的自動成長, 切記不要使用預設值 ( 會長大的很快, 視單位狀況而定 ), 微軟建議如果資料量小於 1GB 可以使用以MB為單位, 如果大於1GB建議以百分比為單位.
資料庫的初始大小, 在實務上如果已經知道資料庫的大小就直接給足整顆硬碟. 不需要讓SQL Server 還要去做自動成長浪費時間, 直接給足.
不要把資料庫放在系統碟, 最好整顆都給資料庫( 讓資料庫可以在硬碟做循序存取, 效能的差異很大 )
Lab: 建立資料庫,並建立兩個群組
先於 C:\ 建立資料夾名稱為 新新
於C:\新新 資料夾內建立資料夾, 名稱為主主 ( 存放MDF )
於C:\新新 資料夾內建立資料夾, 名稱為LOG ( 存放LDF )
於C:\新新 資料夾內建立資料夾, 名稱為次次1 ( 存放NDF )
於C:\新新 資料夾內建立資料夾, 名稱為次次2 ( 存放NDF )
開啟Microsoft SQL Server Management Studio
展開本機 --> 資料庫 --> 滑鼠右鍵 --> 新增資料庫 --> 輸入資料庫名稱(NewNew) --> 確定
修改邏輯名稱 NewNew 為 新新( 確認可以支援中文) --> 點選 路徑的'...' 按鈕 --> 選取C:\新新\主主 --> 確定
修改邏輯名稱 NewNew_log 為新新_log --> 點選 路徑的'...' 按鈕 --> 選取C:\新新\LOG --> 確定
點選' 加入' 按鈕 --> 輸入邏輯名稱 次次1 --> 檔案群組 點選 '新增檔案群組' --> 輸入群組名稱 '第一群' --> 確定 --> 點選 路徑的'...' 按鈕 --> 選取C:\新新\次次1 --> 確定
點選' 加入' 按鈕 --> 輸入邏輯名稱 次次2 --> 檔案群組 點選 '第一群' --> 點選 路徑的'...' 按鈕 --> 選取C:\新新\次次1 --> 確定
點選' 加入' 按鈕 --> 輸入邏輯名稱 次次3 --> 檔案群組 點選 '第一群' --> 點選 路徑的'...' 按鈕 --> 選取C:\新新\次次1 --> 確定
點選' 加入' 按鈕 --> 輸入邏輯名稱 次次4 --> 檔案群組 點選 '新增檔案群組' --> 輸入群組名稱 '第二群' --> 確定 --> 點選 路徑的'...' 按鈕 --> 選取C:\新新\次次2 --> 確定
點選' 加入' 按鈕 --> 輸入邏輯名稱 次次2 --> 檔案群組 點選 '第二群' --> 點選 路徑的'...' 按鈕 --> 選取C:\新新\次次2 --> 確定
點選 '確定' 完成新增NewNew資料庫的練習
此時NewNew資料庫結構如下
Primary 群
內含新新.mdf
第一群
內含次次1.ndf, 次次2.ndf, 次次3.ndf
第二群
內含次次4.ndf, 次次5.ndf
LOG(不包含於群內)
內含新新_log.ldf
中午休息
常用的指令於command-line
sp_helpdb 查閱目前伺服器中的所有資料庫
sp_helpdb 資料庫名稱 查閱指定資料庫
例如 sp_helpdb NewNew
卸離與離線工作的差別
離線工作
使用者連線不到資料庫, 但是還是可以在Microsoft SQL Server Management Studio看到
可以在該資料庫上方 使用滑鼠右鍵 --> 工作 --> 線上工作 來掛載回來
卸離
使用者連線不到資料庫, 但是也不能在Microsoft SQL Server Management Studio看到
可以在該資料庫上方 使用滑鼠右鍵 --> 工作 --> 卸離 --> 確定
可以在資料庫上方 使用滑鼠右鍵 --> 附加 --> 加入 --> 選取MDF檔案位置 --> 確定 --> 確定
以command-line 來做卸離
sp_detach_db 資料庫名稱
以command-line 來做附加
sp_attach_db 資料庫名稱 'MDF 所在位置'
以command-line 來做附加
CREATE DATABASE 資料庫名稱
ON
( FILENAME='C:\新新\主主\新主.MDF')
FOR ATTACH
Notes:
當有人在使用資料庫的時候不可以調整資料庫( 錯誤訊息會告知正在使用中)
卸離的目的為昇級或是移動
MDF 會記住卸離前的檔案位置, 至少要告訴MDF 檔案新的檔案位置
可以按鍵盤上面的F5 來執行
一次要執行多到指令, 請用GO 隔開
Lab: 卸離資料庫以及附加資料庫
卸離NewNew資料庫
在NewNew資料庫上方 --> 工作 --> 卸離 --> 確定
使用command-line 附加
於command-line 輸入
create database NewNew
on
(filename='c:\新新\主主\新新.mdf')
for attach
將上述指令選取起來 --> 點選 '執行'
觀察左方就會發現NewNew資料庫已經附加上來
用ALTER DATABASE 敘述修改資料庫 ( 使用圖形介面會比較快)
Lab: 修改資料庫
於C:\新新 資料夾內建立資料夾, 名稱為次次3 ( 存放NDF )
請確認NewNew資料庫有被附加
於command-line 畫面輸入
--修改資料庫, 新增一個檔案群組
ALTER DATABASE NewNew ADD FILEGROUP 第三群
GO
--修改資料庫, 新增一個檔案至指定的檔案群組
ALTER DATABASE NewNew
ADD FILE
(
NAME=次次6, FILENAME='C:\新新\次次3\次次6.NDF',
SIZE=10MB, MAXSIZE=50, FILEGROWTH=8%
) TO FILEGROUP 第三群
GO
--修改資料庫, 新增一個檔案至指定的檔案群組
ALTER DATABASE NewNew
ADD FILE
(
NAME=次次7, FILENAME='C:\新新\次次3\次次7.NDF',
SIZE=10MB, MAXSIZE=50, FILEGROWTH=8%
) TO FILEGROUP 第三群
GO
--修改資料庫, 設定指定的檔案群組為預設群組
ALTER DATABASE NewNew
MODIFY FILEGROUP 第二群 DEFAULT
GO
--修改資料庫, 設定指定的檔案群組為唯讀群組
ALTER DATABASE NewNew
MODIFY FILEGROUP 第三群 READ_ONLY
Lab:修改設定值
先觀察NewNew 資料庫
於NewNew 資料庫上方 --> 滑鼠右鍵 --> 屬性
於command-line
ALTER DATABASE NewNew SET RECOVERY SIMPLE
GO
ALTER DATABASE NewNew SET ANSI_NULLS ON
GO
ALTER DATABASE NewNew SET ANSI_NULL_DEFAULT ON
GO
ALTER DATABASE NewNew SET AUTO_SHRINK ON
GO
再觀察NewNew 資料庫
於NewNew 資料庫上方 --> 滑鼠右鍵 --> 屬性
觀察屬性的改變
Notes:
利用圖形介面可以在資料庫的屬性內, 藉由 '選項' 內的 '狀態' --> '限制存取' 內可以調整為single來讓其他使用者離線
在command-line 可以使用 ALTER DATABASE NewNew SET SINGLE_USER WITH ROLLBACK IMMEDIATE 來立即把資料庫斷線
在command-line 可以使用 ALTER DATABASE NewNew SET MULTI_USER 來回復多人模式
資料型別
整數 使用的位元數
bigint 8bytes
int 4bytes
smallint 2bytes
tinyint 1bytes
bit 1bit
近似浮點數
float 8bytes
real 4bytes
日期時間
datetime 8bytes
smalldatetime 4bytes
精確位數
numeric
decimal
字串
char 1個字元1個byte, 為固定長度, 未填滿的部份, 會自動補上空白字元
varchar 1個字元1個byte, 儲存多少即佔多少空間
text 1個字元1個byte, 儲存多少即佔多少空間, 最大可達2GB
Unicode 字串 雙位元文字編碼標準
nchar 1個字元2個byte, 為固定長度, 未填滿的部份, 會自動補上空白字元
nvarchar 1個字元2個byte, 儲存多少即佔多少空間
ntext 1個字元2個byte, 儲存多少即佔多少空間, 最大可達2GB
Notes:
char 還有varchar 差別在如果沒有填滿, 會不會補空白字元, varchar 還有char 佔用的空間都一樣, varchar沒有比較省空間, 只是對程式開發人員, 在撈資料的時候字數會不同(不用考慮空白字元的問題, 不需特別處理去除空白字元).
varchar 可變動 不會補空白字元
char 不可變動 會補空白字元
以資料庫的角度, 使用char 的方式會比較好, 不用去計算哪些資料沒有使用
以程式人員的角度, 使用varchar 的方式會比較好, 不用處理空白字元