SQL Server Table建立
建之前,查一下:
EXEC sp_helpfilegroup --查詢目前DATABASE有什麼群,ID為何,群裡有幾個檔 SELECT * FROM sys.filegroups --更詳細的查詢
基本建表:
CREATE TABLE 員工表 ( 員工編號 INT NOT NULL, 姓名 NCHAR(5) NOT NULL, 姓別 BIT, 生日 DATE, 電話 CHAR(10), 地址 NCHAR(30), 年齡 AS YEAR(GETDATE())-YEAR(生日), 薪資 INT CHECK (薪資>19720) DEFAULT 19720, --預設19720,必須大於19720 年資 AS 薪資*12 PERSISTED, --PERSISTED 算好後,直接存放硬碟上 --如此不用每次計算,但參數需決定性 --年齡欄位就不行,GETDATE()函數沒有決定性 建檔時間 DATETIME DEFAULT GETDATE(), CHECK (電話 IS NOT NULL OR 地址 IS NOT NULL), CHECK (生日 < GETDATE() AND YEAR(GETDATE())-YEAR(生日) > 15) --檢查,可以放在整個表的最後,或是像'薪資' 欄放在後面 --但是薪資欄中,只能放一個CHECK,整個表可以放多個 /*補充: --員工相片 VARBINARY(MAX) --若有超大型的欄位:VARCHAR(MAX),NVERCHAR(MAX)等等 --要記得在外面ON XXX後面加上 TEXTIMAGE_ON 超大型群 */ ) ON 人事群
主鍵的目的:整張表唯一且不重複的值,用意在辦視每一筆資料 (例:身份證字號)
叢集索引:整張表唯一且排序的依據,影響整張表深遠
主鍵不一定是叢集索引,但大部份
舉例:
班級成績依座號排序 (座號即是主鍵,且是叢集索引,不重複且是排序)
但是今天要找的假設成績大於60分的學生
如此座號排序一點效率也沒有
若當初是依成績排序 (叢集索引)
找的效率就快一點
但是主鍵 (座號) 是不變的
大部份時,主鍵也是索引鍵,用PRIMARY KEY即預設為主索引鍵
.UNIQUE:該欄不可重複
.主鍵可以有2個欄位串在一起當主鍵
.外來鍵預設為NO ACTION,當外來鍵的參考更動或刪除時
會不給改,除非有設定變動行為
CASCADE 是連動的意思
主鍵不一定是叢集索引,但大部份
舉例:
班級成績依座號排序 (座號即是主鍵,且是叢集索引,不重複且是排序)
但是今天要找的假設成績大於60分的學生
如此座號排序一點效率也沒有
若當初是依成績排序 (叢集索引)
找的效率就快一點
但是主鍵 (座號) 是不變的
大部份時,主鍵也是索引鍵,用PRIMARY KEY即預設為主索引鍵
.UNIQUE:該欄不可重複
.主鍵可以有2個欄位串在一起當主鍵
.外來鍵預設為NO ACTION,當外來鍵的參考更動或刪除時
會不給改,除非有設定變動行為
CASCADE 是連動的意思
CREATE TABLE 訂單表 ( 訂單編號 INT PRIMARY KEY, 訂單金額 INT, 負責員工 INT FOREIGN KEY REFERENCES 員工表(員工編號) ON UPDATE CASCADE -- NO ACTION | CASCADE | SET NULL | SET DEFAULT ON DELETE NO ACITON, --這裡指的是訂單表的負責員工,參考了員工表(員工編號) --外來鍵參考,SQLServer規定,參考的外來鍵 --必須是該表的主鍵(不一定是索引鍵) )ON 人事群
留言
張貼留言