星期六, 9月 27, 2008

20080927 SQL 入門班筆記

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 會看到algprocess )

  • 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資料庫的練習

此時可以觀察 C:\新新 資料夾下面的檔案分佈

此時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個字元1byte, 為固定長度, 未填滿的部份, 會自動補上空白字元

    • varchar 1個字元1byte, 儲存多少即佔多少空間

    • text 1個字元1byte, 儲存多少即佔多少空間, 最大可達2GB

  • Unicode 字串 雙位元文字編碼標準

    • nchar 1個字元2byte, 為固定長度, 未填滿的部份, 會自動補上空白字元

    • nvarchar 1個字元2byte, 儲存多少即佔多少空間

    • ntext 1個字元2byte, 儲存多少即佔多少空間, 最大可達2GB


Notes:

  • char 還有varchar 差別在如果沒有填滿, 會不會補空白字元, varchar 還有char 佔用的空間都一樣, varchar沒有比較省空間, 只是對程式開發人員, 在撈資料的時候字數會不同(不用考慮空白字元的問題, 不需特別處理去除空白字元).

    • varchar 可變動 不會補空白字元

    • char 不可變動 會補空白字元

  • 以資料庫的角度, 使用char 的方式會比較好, 不用去計算哪些資料沒有使用

  • 以程式人員的角度, 使用varchar 的方式會比較好, 不用處理空白字元





沒有留言: