SQL建表命令理解

CREATE TABLE

[ database_name.[ owner ] .| owner.] table_name

( { < column_definition >

| column_name AS computed_column_expression

| < table_constraint > ::= [ CONSTRAINT constraint_name ] }

| [ { PRIMARY KEY | UNIQUE } [ ,...n ]

)

[ ON { filegroup | DEFAULT } ]

[ TEXTIMAGE_ON { filegroup | DEFAULT } ]

< column_definition > ::= { column_name data_type }

[ COLLATE < collation_name > ]

[ [ DEFAULT constant_expression ]

| [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]

]

[ ROWGUIDCOL]

[ < column_constraint > ] [ ...n ]

< column_constraint > ::= [ CONSTRAINT constraint_name ]

{ [ NULL | NOT NULL ]

| [ { PRIMARY KEY | UNIQUE }

[ CLUSTERED | NONCLUSTERED ]

[ WITH FILLFACTOR = fillfactor ]

[ON {filegroup | DEFAULT} ] ]

]

| [ [ FOREIGN KEY ]

REFERENCES ref_table [ ( ref_column ) ]

[ ON DELETE { CASCADE | NO ACTION } ]

[ ON UPDATE { CASCADE | NO ACTION } ]

[ NOT FOR REPLICATION ]

]

| CHECK [ NOT FOR REPLICATION ]

( logical_expression )

}

< table_constraint > ::= [ CONSTRAINT constraint_name ]

{ [ { PRIMARY KEY | UNIQUE }

[ CLUSTERED | NONCLUSTERED ]

{ ( column [ ASC | DESC ] [ ,...n ] ) }

[ WITH FILLFACTOR = fillfactor ]

[ ON { filegroup | DEFAULT } ]

]

| FOREIGN KEY

[ ( column [ ,...n ] ) ]

REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]

[ ON DELETE { CASCADE | NO ACTION } ]

[ ON UPDATE { CASCADE | NO ACTION } ]

[ NOT FOR REPLICATION ]

| CHECK [ NOT FOR REPLICATION ]

( search_conditions )

}


最佳答案:

參數(shù)

database_name

是要在其中創(chuàng)建表的數(shù)據庫名稱database_name 必須是現(xiàn)有數(shù)據庫的名稱如果不指定數(shù)據庫,database_name 默認為當前數(shù)據庫當前連接的登錄必須在 database_name 所指定的數(shù)據庫中有關聯(lián)的現(xiàn)有用戶 ID腋么,而該用戶 ID 必須具有創(chuàng)建表的權限

owner

是新表所有者的用戶 ID 名褪子,owner 必須是 database_name 所指定的數(shù)據庫中的現(xiàn)有用戶 ID蕾盯,owner 默認為與 database_name 所指定的數(shù)據庫中的當前連接相關聯(lián)的用戶 ID如果 CREATE TABLE 語句由 sysadmin 固定服務器角色成員或 database_name 所指定的數(shù)據庫中的 db_dbowner 或 db_ddladmin 固定數(shù)據庫角色成員執(zhí)行蛀骇,則 owner 可以指定與當前連接的登錄相關聯(lián)的用戶 ID 以外的其它用戶 ID如果與執(zhí)行 CREATE TABLE 語句的登錄相關聯(lián)的用戶 ID 僅具有創(chuàng)建表的權限,則 owner 必須指定與當前登錄相關聯(lián)的用戶 IDsysadmin 固定服務器角色成員或別名為 dbo 用戶的登錄與用戶 ID dbo 相關聯(lián)镐躲;因此骆捧,由這些用戶創(chuàng)建的表的默認所有者為 dbo不是由上述兩種角色的登錄創(chuàng)建的表所有者默認為與該登錄相關聯(lián)的用戶 ID

table_name

是新表的名稱表名必須符合標識符規(guī)則數(shù)據庫中的 owner.table_name 組合必須唯一table_name 最多可包含 128 個字符,但本地臨時表的表名(名稱前有一個編號符 #)最多只能包含 116 個字符

column_name

是表中的列名列名必須符合標識符規(guī)則,并且在表內唯一以 timestamp 數(shù)據類型創(chuàng)建的列可以省略 column_name如果不指定 column_name锅锨,timestamp 列的名稱默認為 timestamp

computed_column_expression

是定義計算列值的表達式計算列是物理上并不存儲在表中的虛擬列計算列由同一表中的其它列通過表達式計算得到例如叽赊,計算列可以這樣定義:cost AS price * qty表達式可以是非計算列的列名、常量必搞、函數(shù)必指、變量,也可以是用一個或多個運算符連接的上述元素的任意組合表達式不能為子查詢

計算列可用于選擇列表恕洲、WHERE 子句塔橡、ORDER BY 子句或任何其它可使用常規(guī)表達式的位置,但下列情況除外:

計算列不能用作 DEFAULT 或 FOREIGN KEY 約束定義霜第,也不能與 NOT NULL 約束定義一起使用但是葛家,如果計算列由具有確定性的表達式定義,并且索引列中允許計算結果的數(shù)據類型泌类,則可將該列用作索引中的鍵列癞谒,或用作 PRIMARY KEY 或 UNIQUE 約束的一部分

例如,如果表中含有整型列 a 和 b刃榨,則可以在計算列 a+b 上創(chuàng)建索引但不能在計算列 a+DATEPART(dd, GETDATE()) 上創(chuàng)建索引弹砚,因為在以后的調用中,其值可能發(fā)生改變

計算列不能作為 INSERT 或 UPDATE 語句的目標

說明?? 表中計算列所使用的列值因行而異枢希,因此每行的計算列值可能不同

計算列的為空性是由 SQL Server 根據使用的表達式自動確定的即使只有不可為空的列桌吃,大多數(shù)表達式的結果也認為是可為空的,因為可能的下溢或溢出也將生成 NULL 結果使用 COLUMNPROPERTY 函數(shù)(AllowsNull 屬性)查看表中任何計算列的為空性通過指定 ISNULL(check_expression, constant)晴玖,其中常量為替代任何 NULL 結果的非 NULL 值读存,可為空的表達式 expr 可以轉換為不可為空的表達式

ON {filegroup | DEFAULT}

指定存儲表的文件組數(shù)據庫中必須存在該文件組如果指定 DEFAULT,或者根本未指定 ON 參數(shù)呕屎,則表存儲在默認文件組中

ON {filegroup | DEFAULT} 也可以在 PRIMARY KEY 約束或 UNIQUE 約束中指定這些約束會創(chuàng)建索引如果指定 filegroup让簿,則索引將存儲在指定的文件組中如果指定 DEFAULT,則索引將存儲在默認文件組中如果約束中沒有指定文件組秀睛,則索引將與表存儲在同一文件組中如果 PRIMARY KEY 約束或 UNIQUE 約束創(chuàng)建聚集索引尔当,則表的數(shù)據頁將與索引存儲在同一文件組中

說明?? 在 ON {filegroup | DEFAULT} 和 TEXTIMAGE_ON {filegroup | DEFAULT} 的上下文中,DEFAULT 并不是關鍵字DEFAULT 是默認文件組的標識符并需對其進行定界蹂安,如 ON /”DEFAULT/”椭迎、ON [DEFAULT] 和 TEXTIMAGE_ON /”DEFAULT/” 或 TEXTIMAGE_ON [DEFAULT]

TEXTIMAGE_ON

是表示 text、ntext 和 image 列存儲在指定文件組中的關鍵字如果表中沒有 text田盈、ntext 或 image 列畜号,則不能使用 TEXTIMAGE ON如果沒有指定 TEXTIMAGE_ON,則 text允瞧、ntext 和 image 列將與表存儲在同一文件組中

data_type

指定列的數(shù)據類型可以是系統(tǒng)數(shù)據類型或用戶定義數(shù)據類型用戶定義數(shù)據類型必須先用 sp_addtype 創(chuàng)建简软,然后才能在表定義中使用

在 CREATE TABLE 語句中蛮拔,用戶定義數(shù)據類型的 NULL/NOT NULL 賦值可被替代但長度標準不能更改;不能在 CREATE TABLE 語句中指定用戶定義數(shù)據類型的長度

DEFAULT

如果在插入過程中未顯式提供值痹升,則指定為列提供的值DEFAULT 定義可適用于除定義為 timestamp 或帶 IDENTITY 屬性的列以外的任何列除去表時建炫,將刪除 DEFAULT 定義只有常量值(如字符串)、系統(tǒng)函數(shù)(如 SYSTEM_USER())或 NULL 可用作默認值為保持與 SQL Server 早期版本的兼容疼蛾,可以給 DEFAULT 指派約束名

constant_expression

是用作列的默認值的常量肛跌、NULL 或系統(tǒng)函數(shù)

IDENTITY

表示新列是標識列當向表中添加新行時,Microsoft? SQL Server? 將為該標識列提供一個唯一的察郁、遞增的值標識列通常與 PRIMARY KEY 約束一起用作表的唯一行標識符可以將 IDENTITY 屬性指派給 tinyint衍慎、smallint、int绳锅、bigint西饵、decimal(p,0) 或 numeric(p,0) 列對于每個表只能創(chuàng)建一個標識列不能對標識列使用綁定默認值和 DEFAULT 約束必須同時指定種子和增量,或者二者都不指定如果二者都未指定鳞芙,則取默認值 (1,1)

seed

是裝入表的第一行所使用的值

increment

是添加到前一行的標識值的增量值

NOT FOR REPLICATION

表示當復制登錄(如 sqlrepl)向表中插入數(shù)據時,不強制 IDENTITY 屬性復制的行必須保留發(fā)布數(shù)據庫中所賦予的鍵值期虾;NOT FOR REPLICATION 子句確保不向復制進程所插入的行賦予新的標識值其它登錄所插入的行仍然具有以通常的方式創(chuàng)建的新標識值建議同時使用具有 NOT FOR REPLICATION 的 CHECK 約束原朝,以確保賦予的標識值處于當前數(shù)據庫所需的范圍內

ROWGUIDCOL

表示新列是行的全局唯一標識符列對于每個表只能指派一個 uniqueidentifier 列作為 ROWGUIDCOL 列ROWGUIDCOL 屬性只能指派給 uniqueidentifier 列如果數(shù)據庫兼容級別小于或等于 65,則 ROWGUIDCOL 關鍵字無效有關更多信息镶苞,請參見 sp_dbcmptlevel

ROWGUIDCOL 屬性并不強制列中所存儲值的唯一性該屬性也不會為插入到表中的新行自動生成值若要為每列生成唯一值喳坠,那么或者在 INSERT 語句中使用 NEWID 函數(shù),或者將 NEWID 函數(shù)指定為該列的默認值

collation_name

指定列的排序規(guī)則排序規(guī)則名稱既可以是 Windows 排序規(guī)則名稱茂蚓,也可以是 SQL 排序規(guī)則名稱collation_name 僅適用于數(shù)據類型為 char壕鹉、varchar、text聋涨、nchar晾浴、nvarchar 及 ntext 的列如果沒有指定該參數(shù),那么如果列的數(shù)據類型是用戶定義的牍白,則該列的排序規(guī)則就是用戶定義數(shù)據類型的排序規(guī)則脊凰,否則就是數(shù)據庫的默認排序規(guī)則

有關 Windows 和 SQL 排序規(guī)則名稱的更多信息,請參見 COLLATE

CONSTRAINT

是可選關鍵字茂腥,表示 PRIMARY KEY狸涌、NOT NULL、UNIQUE最岗、FOREIGN KEY 或 CHECK 約束定義的開始約束是特殊屬性帕胆,用于強制數(shù)據完整性并可以為表及其列創(chuàng)建索引

constrain_name

是約束的名稱約束名在數(shù)據庫內必須是唯一的

NULL | NOT NULL

是確定列中是否允許空值的關鍵字從嚴格意義上講,NULL 不是約束般渡,但可以使用與指定 NOT NULL 同樣的方法指定

PRIMARY KEY

是通過唯一索引對給定的一列或多列強制實體完整性的約束對于每個表只能創(chuàng)建一個 PRIMARY KEY 約束

UNIQUE

是通過唯一索引為給定的一列或多列提供實體完整性的約束一個表可以有多個 UNIQUE 約束

CLUSTERED | NONCLUSTERED

是表示為 PRIMARY KEY 或 UNIQUE 約束創(chuàng)建聚集或非聚集索引的關鍵字PRIMARY KEY 約束默認為 CLUSTERED懒豹,UNIQUE 約束默認為 NONCLUSTERED

在 CREATE TABLE 語句中只能為一個約束指定 CLUSTERED如果在為 UNIQUE 約束指定 CLUSTERED 的同時又指定了 PRIMARY KEY 約束右蹦,則 PRIMARY KEY 將默認為 NONCLUSTERED

[ WITH FILLFACTOR = fillfactor ]

指定 SQL Server 存儲索引數(shù)據時每個索引頁的充滿程度用戶指定的 fillfactor 取值范圍從 1 到 100如果沒有指定 fillfactor,則默認為 0創(chuàng)建索引時歼捐,fillfactor 的值越低何陆,不必分配新空間即可由新索引項使用的空間就越多

FOREIGN KEY…REFERENCES

是為列中的數(shù)據提供引用完整性的約束FOREIGN KEY 約束要求列中的每個值在被引用表中對應的被引用列中都存在FOREIGN KEY 約束只能引用被引用表中為 PRIMARY KEY 或 UNIQUE 約束的列或被引用表中在 UNIQUE INDEX 內引用的列

ref_table

是 FOREIGN KEY 約束所引用的表名

(ref_column[,...n])

是 FOREIGN KEY 約束所引用的表中的一列或多列

ON DELETE {CASCADE | NO ACTION}

指定當要創(chuàng)建的表中的行具有引用關系,并且從父表中刪除該行所引用的行時豹储,要對該行采取的操作默認設置為 NO ACTION

如果指定 CASCADE贷盲,則從父表中刪除被引用行時,也將從引用表中刪除引用行如果指定 NO ACTION剥扣,SQL Server 將產生一個錯誤并回滾父表中的行刪除操作

例如巩剖,在 Northwind 數(shù)據庫中,Orders 表和 Customers 表之間有引用關系Orders.CustomerID 外鍵引用 Customers.CustomerID 主鍵

如果對 Customers 表的某行執(zhí)行 DELETE 語句钠怯,并且為 Orders.CustomerID 指定 ON DELETE CASCADE 操作佳魔,則 SQL Server 將在 Orders 表中檢查是否有與被刪除的行相關的一行或多行如果存在相關行,則 Orders 表中的相關行將隨 Customers 表中的被引用行一同刪除

反之晦炊,如果指定 NO ACTION鞠鲜,若在 Orders 表中至少有一行引用 Customers 表中要刪除的行,則 SQL Server 將產生一個錯誤并回滾 Customers 表中的刪除操作

ON UPDATE {CASCADE | NO ACTION}

指定當要創(chuàng)建的表中的行具有引用關系断国,并且在父表中更新該行所引用的行時贤姆,要對該行采取的操作默認設置為 NO ACTION

如果指定 CASCADE,則在父表中更新被引用行時稳衬,也將在引用表中更新引用行如果指定 NO ACTION霞捡,SQL Server 將產生一個錯誤并回滾父表中的行更新操作

例如,在 Northwind 數(shù)據庫中薄疚,Orders 表和 Customers 表之間有引用關系:Orders.CustomerID 外鍵引用 Customers.CustomerID 主鍵

如果對 Customers 表的某行執(zhí)行 UPDATE 語句碧信,并且為 Orders.CustomerID 指定 ON UPDATE CASCADE 操作,則 SQL Server 將在 Orders 表中檢查是否有與被更新行相關的一行或多行如果存在相關行街夭,則 Orders 表中的相關行將隨 Customers 表中的被引用行一同更新

反之砰碴,如果指定 NO ACTION,若在 Orders 表中至少有一行引用 Customers 行莱坎,則 SQL Server 將產生一個錯誤并回滾對 Customers 行的更新操作

CHECK


是通過限制可輸入到一列或多列中的可能值強制域完整性的約束

NOT FOR REPLICATION

是用于防止在復制所使用的分發(fā)過程中強制 CHECK 約束的關鍵字當表是復制發(fā)布的訂戶時衣式,請不要直接更新訂閱表,而要更新發(fā)布表檐什,然后讓復制進程將數(shù)據分發(fā)回訂閱表可以在訂閱表上定義 CHECK 約束碴卧,以防用戶修改訂閱表但是如果不使用 NOT FOR REPLICATION 子句,CHECK 約束同樣會防止復制進程將修改從發(fā)布表分發(fā)給訂閱表NOT FOR REPLICATION 子句表示對用戶的修改(而不是對復制進程)強加約束

NOT FOR REPLICATION CHECK 約束適用于被更新記錄的前像和后像乃正,以防在復制范圍中添加記錄或從復制范圍中刪除記錄將檢查所有刪除和插入操作住册;如果操作在復制范圍內,則拒絕執(zhí)行該操作

如果對標識符列使用此約束瓮具,則當復制用戶更新標識列時荧飞,SQL Server 將允許不必重新計算表標識列的種子值

logical_expression

是返回 TRUE 或 FALSE 的邏輯表達式

column

是用括號括起來的一列或多列凡人,在表約束中表示這些列用在約束定義中

[ASC | DESC]

指定加入到表約束中的一列或多列的排序次序默認設置為 ASC

n

是表示前面的項可重復 n 次的占位符

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市叹阔,隨后出現(xiàn)的幾起案子挠轴,更是在濱河造成了極大的恐慌,老刑警劉巖耳幢,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岸晦,死亡現(xiàn)場離奇詭異,居然都是意外死亡睛藻,警方通過查閱死者的電腦和手機启上,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來店印,“玉大人冈在,你說我怎么就攤上這事“凑” “怎么了包券?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長院峡。 經常有香客問我兴使,道長,這世上最難降的妖魔是什么照激? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮盹牧,結果婚禮上俩垃,老公的妹妹穿的比我還像新娘。我一直安慰自己汰寓,他們只是感情好口柳,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著有滑,像睡著了一般跃闹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上毛好,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天望艺,我揣著相機與錄音,去河邊找鬼肌访。 笑死找默,一個胖子當著我的面吹牛,可吹牛的內容都是我干的吼驶。 我是一名探鬼主播惩激,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼店煞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了风钻?” 一聲冷哼從身側響起顷蟀,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎骡技,沒想到半個月后鸣个,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡哮兰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年毛萌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喝滞。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡阁将,死狀恐怖,靈堂內的尸體忽然破棺而出右遭,到底是詐尸還是另有隱情做盅,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布窘哈,位于F島的核電站吹榴,受9級特大地震影響,放射性物質發(fā)生泄漏滚婉。R本人自食惡果不足惜图筹,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望让腹。 院中可真熱鬧远剩,春花似錦、人聲如沸骇窍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腹纳。三九已至痢掠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嘲恍,已是汗流浹背足画。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蛔钙,地道東北人锌云。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像吁脱,于是被迫代替她去往敵國和親桑涎。 傳聞我的和親對象是個殘疾皇子彬向,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容