一、建表注意事項(xiàng)
1.1 數(shù)據(jù)類型
可以看這個(gè)去了解數(shù)據(jù)類型:
1.2 建立數(shù)據(jù)表的基本SQL語法
建立數(shù)據(jù)表的基本 SQL 語法如下:
creat table table_name (
column1 datatype [constraint],
column2 datatype [constraint],
column3 datatype [constraint],
...
);
這里是各部分的詳細(xì)說明:
-
create table
: 這是一個(gè) SQL 命令,用于創(chuàng)建新表。 -
table_name
: 所創(chuàng)建的表的名稱。 -
column1
,column2
,column3
, … : 這些是你想在表中創(chuàng)建的列的名稱。 -
datatype
: 每列的數(shù)據(jù)類型,例如int
、varchar
、date
等。 -
constraint
: 可選項(xiàng),用于定義列的規(guī)則,如not null、
primary key 、
foreing key、unique
、check
、default
等。
二、實(shí)例說明
現(xiàn)在我們通過建立幾個(gè)數(shù)據(jù)表來進(jìn)行詳細(xì)的說明
2.1 創(chuàng)建數(shù)據(jù)表
use StudentManageDB
go
if exists(select * from sysobjects where name='Students')
drop table Students
go
create table Students
(
StudentID int identity(10000,1),--學(xué)號(hào)
StudentName varchar(20)not null,--姓名
Gender char(2) not null,--性別
Birthday datetime not null,--出生日期
StudentIdNo numeric(18,0)not null,--身份證號(hào)
Age int not null,--年齡
PhoneNumber varchar(50),
StudentAddress varchar(500),
ClassId int not null --班級
)
go
這段SQL語句在SQL Server數(shù)據(jù)庫中創(chuàng)建一個(gè)新的數(shù)據(jù)表名為“Students”,用于存儲(chǔ)學(xué)生信息。下面是這段SQL語句的詳細(xì)分析和說明:
-
use StudentManageDB
: 這條命令指示SQL Server使用名為StudentManageDB
的數(shù)據(jù)庫,因?yàn)榻ū硗ǔP枰谝呀?jīng)存在的數(shù)據(jù)庫內(nèi)進(jìn)行。所有接下來的操作都將在這個(gè)數(shù)據(jù)庫上進(jìn)行。創(chuàng)建數(shù)據(jù)表在第二節(jié) -
go
:GO
是一個(gè)批處理命令,用于分隔批處理SQL Server語句。SQL Server Management Studio和一些其他SQL界面用它來標(biāo)識(shí)一組一起執(zhí)行的命令的結(jié)束。它不是SQL語句,而是一個(gè)命令指令。 -
if exists(select * from sysobjects where name='Students') drop table Students
: 這條語句檢查名為“Students”的表是否存在于數(shù)據(jù)庫中。如果存在,它會(huì)執(zhí)行drop table Students
命令來刪除這個(gè)表。這樣能確保創(chuàng)建新表時(shí)不會(huì)因?yàn)橐粋€(gè)同名的表已經(jīng)存在而出現(xiàn)錯(cuò)誤。 -
go
: 再次使用GO
指令來結(jié)束上一批命令。 -
create table Students
: 這條命令開始創(chuàng)建一個(gè)新的表“Students”。表中包含以下字段:-
StudentID
: 學(xué)號(hào),設(shè)定為自動(dòng)增長的整數(shù)類型。identity是標(biāo)識(shí)列(后面講),起始值為10000,每次新增一條記錄,ID值增加1。看數(shù)據(jù)類型點(diǎn)這個(gè) -
StudentName
: 學(xué)生的姓名,它是一個(gè)變長字符串(varchar
),最多可包含20個(gè)字符,并且不允許為空(not null
)。 -
Gender
: 性別,設(shè)定為固定長度為2的字符類型(char
),不允許為空。 -
Birthday
: 出生日期,使用datetime
類型來存儲(chǔ)日期和時(shí)間數(shù)據(jù),不允許為空。 -
StudentIdNo
: 學(xué)生的身份證號(hào)碼,它是一個(gè)數(shù)值型字段(numeric
),最多18位數(shù)字,沒有小數(shù)位,并且不允許為空。 -
Age
: 學(xué)生的年齡,是一個(gè)整數(shù)類型的字段,不允許為空。 -
PhoneNumber
: 學(xué)生的聯(lián)系電話,是一個(gè)變長字符串,最多可以包含50個(gè)字符。 -
StudentAddress
: 學(xué)生的地址,是一個(gè)更長的變長字符串,最多可包含500個(gè)字符。 -
ClassId
: 班級編號(hào),是一個(gè)整數(shù)類型的字段,不允許為空。它建立了一個(gè)關(guān)聯(lián)到另一張表(假設(shè)為班級信息表)的外鍵關(guān)系。
-
-
go
: 這條指令結(jié)束了創(chuàng)建表的命令批次。
2.2 實(shí)例2
if exists(select * from sysobjects where name='ScoreList')
drop table ScoreList
go
create table ScoreList
(
Id int identity(1,1)primary key,
StudentId int not null,--學(xué)號(hào)外鍵
CSharp int null,
SQLServer int null,
UpdataTime datetime not null --更新時(shí)間
)
go
首先,在SQL 腳本中,Id
列被直接定義為主鍵。
Id int identity(1,1) primary key,
在這行中,Id
列的定義包含了關(guān)鍵詞 primary key
,這明確地將 Id
列設(shè)置為 ScoreList
表的主鍵。因此,每當(dāng)向 ScoreList
表插入新記錄時(shí),Id
列將自動(dòng)增加(從1開始,每次增加1),并且保證每一條記錄的 Id
值都是唯一的。
identity(1,1)
部分是 SQL Server 特有的語法,它指定 Id
列是一個(gè)自動(dòng)增長的標(biāo)識(shí)列,起始值為1,每次新增記錄時(shí)自動(dòng)增長的步長也是1。
我們可以查看創(chuàng)建的數(shù)據(jù)表:
把第一行填完后使用Enter鍵,自動(dòng)生成1
-
CSharp int null,
這表示
ScoreList
表中有一個(gè)名為CSharp
的列,它的數(shù)據(jù)類型是int
(整數(shù))。null
關(guān)鍵字表示這個(gè)字段能夠存儲(chǔ)NULL
值,即該字段不是必須的,可以沒有值。在數(shù)據(jù)庫中,NULL
是一個(gè)特殊的標(biāo)記,表示字段的值是未知的或缺失的。 -
SQLServer int null,
這表示表中有一個(gè)名為 SQLServer
的列,其數(shù)據(jù)類型也是 int
。同樣的,null
表示這個(gè)字段可以接受 NULL
值,即它也是一個(gè)可選的字段,不是強(qiáng)制必填的。
-
UpdataTime datetime not null --更新時(shí)間
這一行定義了一個(gè)名為
UpdataTime
的列,數(shù)據(jù)類型為datetime
,這意味著該字段將存儲(chǔ)日期和時(shí)間信息。not null
關(guān)鍵字表示這個(gè)字段是必須的,必須要有值,不能存儲(chǔ)NULL
。
要注意SQL中的注釋,用雙減號(hào)--
表示。
三、標(biāo)識(shí)列和主鍵
標(biāo)識(shí)列和主鍵在數(shù)據(jù)庫中有不同的作用:
-
自動(dòng)遞增:
- 標(biāo)識(shí)列:通常會(huì)有一個(gè)自動(dòng)遞增的屬性,每當(dāng)插入新的記錄時(shí),標(biāo)識(shí)列的值會(huì)自動(dòng)增加,這個(gè)過程是自動(dòng)的,不需要用戶輸入。
- 主鍵:沒有自動(dòng)遞增的屬性,除非它被明確定義為標(biāo)識(shí)列。主鍵的值可以是手動(dòng)插入的,比如在使用復(fù)合主鍵或者業(yè)務(wù)邏輯要求使用特定格式的鍵值時(shí)。
-
唯一性:
- 標(biāo)識(shí)列:雖然標(biāo)識(shí)列的值是唯一的,因?yàn)槊看尾迦攵紩?huì)增加,但是標(biāo)識(shí)列本身并不強(qiáng)制唯一性,除非它也被指定為主鍵。
- 主鍵:保證了表中每一行的唯一性,這是數(shù)據(jù)庫強(qiáng)制的約束,不允許有兩行具有相同的主鍵值。
-
NULL值:
- 標(biāo)識(shí)列:通常不允許NULL值,因?yàn)樗荚跒槊恳恍刑峁┮粋€(gè)唯一的標(biāo)識(shí)符。
- 主鍵:同樣不允許NULL值,因?yàn)槊啃卸夹枰幸粋€(gè)明確的標(biāo)識(shí)符來維護(hù)數(shù)據(jù)完整性。
-
顯示在查詢結(jié)果中:
- 標(biāo)識(shí)列:當(dāng)進(jìn)行查詢操作時(shí),標(biāo)識(shí)列的值會(huì)按照插入順序的遞增顯示。
- 主鍵:查詢結(jié)果中會(huì)顯示主鍵字段的值,不一定是遞增的,取決于主鍵值的插入方式。
-
索引:
- 標(biāo)識(shí)列:即使是標(biāo)識(shí)列,也不一定有索引,除非你創(chuàng)建索引或者將其設(shè)置為主鍵。
- 主鍵:默認(rèn)會(huì)有一個(gè)唯一索引,以加快按主鍵字段的查詢和排序操作。
簡而言之,標(biāo)識(shí)列在視覺上通常表現(xiàn)為一個(gè)按插入順序遞增的數(shù)字序列,而主鍵則是確保每行唯一且不為空的約束條件。如果主鍵設(shè)置為標(biāo)識(shí)列,那么它就同時(shí)具備了上述兩種屬性。
示例:
假設(shè)我們有一個(gè)用戶信息表,我們希望每個(gè)用戶都有一個(gè)唯一的用戶ID,并且我們希望數(shù)據(jù)庫能夠在新增用戶記錄時(shí)自動(dòng)為每個(gè)用戶生成這個(gè)ID。
這是創(chuàng)建這樣一個(gè)表的SQL語句示例:
create table Users (
UserID int identity(1,1) primary key,
Username varchar(255) not null ,
Email varchar(255) not null
);
在這個(gè)例子中:文章來源:http://www.zghlxwxcb.cn/news/detail-798402.html
-
UserID
是一個(gè)標(biāo)識(shí)列,因?yàn)樗哂?identity(1,1)
屬性。這意味著每次插入新行時(shí),UserID
會(huì)從1開始自動(dòng)遞增。 -
UserID
同時(shí)也是主鍵,如primary key
關(guān)鍵詞所定義的。這確保了UserID
的值在表中是唯一的,而且每個(gè)用戶都會(huì)有一個(gè)唯一的標(biāo)識(shí)符。
在這種情況下,UserID
字段既是標(biāo)識(shí)列(保證每個(gè)用戶有一個(gè)自動(dòng)分配、遞增的唯一ID)又是主鍵(保證每行數(shù)據(jù)的唯一性并且不允許空值)。然而,并非所有主鍵都是標(biāo)識(shí)列。你可以有一個(gè)主鍵而沒有自動(dòng)遞增的特性,特別是當(dāng)主鍵為復(fù)合主鍵時(shí),由多個(gè)列組合成時(shí),通常不會(huì)使用標(biāo)識(shí)列。文章來源地址http://www.zghlxwxcb.cn/news/detail-798402.html
到了這里,關(guān)于SQL Server Management Studio創(chuàng)建數(shù)據(jù)表的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!