日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)

發(fā)布時間:2024/10/12 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在實際開發(fā)中,可能很少人會手寫sql腳本來操作數據庫的種種。特別是微軟的MS SQL Server數據庫,它的SQL Server Management Studio對數據庫的圖形化操作極致簡便,從而導致很多人都不會或不熟悉使用SQL腳本操作數據庫。

接下面介紹的是我們日常開發(fā)中常規(guī)性的各種操作,先看看基本知識,隨后使用coding來表述。

SQL Server 常見五種約束:

  Primary Key  --主鍵約束
  Foreign Key  --外鍵約束
  Unique     --唯一約束
  Default     --默認值約束
  Check     --條件約束(邏輯判斷約束)

什么是主鍵?

在數據庫中,常常不只是一個表,這些表之間也不是相互獨立的。不同的表之間需要建立一種關系,才能將它們的數據相互溝通。而在這個溝通過程中,就需要表中有一個字段作為標志,不同的記錄對應的字段取值不能相同,也不能是空白的。通過這個字段中不同的值可以區(qū)別各條記錄。就像我們區(qū)別不同的人,每個人都有名字,但它卻不能作為主鍵,因為人名很容易出現(xiàn)重復,而身份證號是每個人都不同的,所以可以根據它來區(qū)別不同的人。數據庫的表中作為主鍵的字段就要像人的身份證號一樣,必須是每個記錄的值都不同,這樣才能根據主鍵的值來確定不同的記錄。

如果為表指定了 PRIMARY KEY 約束,則 SQL Server 2005 數據庫引擎 將通過為主鍵列創(chuàng)建唯一索引來強制數據的唯一性。當在查詢中使用主鍵時,此索引還可用來對數據進行快速訪問。因此,所選的主鍵必須遵守創(chuàng)建唯一索引的規(guī)則。

創(chuàng)建主鍵時,數據庫引擎 會自動創(chuàng)建唯一的索引來強制實施 PRIMARY KEY 約束的唯一性要求。如果表中不存在聚集索引或未顯式指定非聚集索引,則將創(chuàng)建唯一的聚集索引以強制實施 PRIMARY KEY 約束。

唯一性約束
1) 唯一性約束所在的列允許空值,但是主鍵約束所在的列不允許空值。
(2) 可以把唯一性約束放在一個或者多個列上,這些列或列的組合必須有唯一的只。但是,唯一性約束所在的列并不是表的主鍵列。
(3) 唯一性約束強制在指定的列上創(chuàng)建一個唯一性索引。在默認情況下,創(chuàng)建唯一性的非聚簇索引,但是,也可以指定所創(chuàng)建的索引是聚簇索引。

主鍵:?
1) 用于標識某行而且與之相關.?
2) 是不可能(或很難)更新.?
3) 不應該允許空(NULL).

唯一域/字段:?
1) 用于作為訪問某行的可選手段.
2) 只要唯一就可以更新.?
3) 可以為空(NULLs).

注意唯一和主鍵的區(qū)別,它們都是創(chuàng)建一個唯一的索引,一個表格僅含有一個主鍵約束列,但是,它有可能在其他列中含有許多的唯一約束。

1、Primary Key約束

??? 在表中常有一列或多列的組合,其值能唯一標識表中的每一行。

??? 這樣的一列或多列成為表的主鍵(PrimaryKey)。一個表只能有一個主鍵,而且主鍵約束中的列不能為空值。只有主鍵列才能被作為其他表的外鍵所創(chuàng)建。

2、Foreign Key約束

??? 外鍵約束是用來加強兩個表(主表和從表)的一列或多列數據之間的連接的。創(chuàng)建外鍵約束的順序是先定義主表的主鍵,然后定義從表的外鍵。也就是說只有主表的主鍵才能被從表用來作為外鍵使用,被約束的從表中的列可以不是主鍵,主表限制了從表更新和插入的操作。

3、Unique約束

??? 唯一約束確保表中的一列數據沒有相同的值。與主鍵約束類似,唯一約束也強制唯一性,但唯一約束用于非主鍵的一列或者多列的組合,且一個表可以定義多個唯一約束。

4、Default約束

??? 若在表中定義了默認值約束,用戶在插入新的數據行時,如果該行沒有指定數據,那么系統(tǒng)將默認值賦給該列,如果我們不設置默認值,系統(tǒng)默認為NULL。

5、Check約束

??? Check約束通過邏輯表達式來判斷數據的有效性,用來限制輸入一列或多列的值的范圍。在列中更新數據時,所要輸入的內容必須滿足Check約束的條件,否則將無法正確輸入。

?

---創(chuàng)建數據庫,語句: create database 表名

Create database School

----刪除數據庫,語句:drop database 表名

drop database School

--創(chuàng)建數據表,語句:create table 表名( 字段A 類型 可空, 字段B 類型 可空)

Create Table Grade( Id int not null identity(1,1), --identity 設置字段自增長,步進值為1 Name nvarchar not null )

--創(chuàng)建主鍵約束,語句: alter table 表名 add constraint [主鍵名稱] primary key (主鍵字段)

alter table Grade Add constraint [PK_Grade] primary key (Id)

--創(chuàng)建唯一約束,語句: alter table 表名 add constraint [約束名稱] unique (字段 排序)

alter table Grade add constraint [IX_Grade_Name] unique (Id asc)

--創(chuàng)建數據表,語句:create table 表名( 字段A 類型 可空, 字段B 類型 可空)

create Table Student( Id int not null identity, Cid int not null, Name nvarchar(100) not null, Gender nchar(8) not null )

--創(chuàng)建主鍵約束,語句: alter table 表名 add constraint [主鍵名稱] primary key (主鍵字段)

alter table Student Add constraint PK_Student primary key (Id)

--創(chuàng)建外鍵約束,語句: alter table 表名 add constraint [外鍵名稱] foreign key (字段) references 外鏈表名(字段)

alter table Student Add constraint FK_Student_Cid foreign key (Id) references Grade(Id)

--創(chuàng)建唯一約束,語句:alter table 表名 add constraint [約束名稱] unique (字段 排序)

alter table Student Add constraint IX_Student_Name unique (Id desc)

--創(chuàng)建Default約束,語句:alter table 表名 add constraint [約束名稱] default (默認值) for (字段)

alter table Student add constraint DF_Student_Gender default (N'') FOR [Gender]

--創(chuàng)建Check約束,語句:alter table 表名 add constraint [約束名稱] check (邏輯表達式)?

alter table Student add constraint CK_Student_Gender CHECK (([Gender]=N'' OR [Gender]=N''))

--刪除約束,語句: alter table 表名 drop constraint [約束名稱]

alter table Student drop constraint IX_Student_Name

--修改字段,語句:alter table 表名 alter column [字段名] 類型 可空

alter table Grade alter column [Name] nvarchar(100) not null

--添加字段,語句:alter table 表名 add [字段名] 類型 可空?

alter table Grade add [Year] char(8) not null

--刪除字段,語句:alter table drop column [字段名]

alter table Grade drop column [Year]

--填充數據

insert into Grade select N'一年級','2017' --方法一 insert into Grade(Name,[Year]) values (N'二年級','2017') --方法二 insert into Grade select N'三年級','2017'insert into Student select 2,N'張三','' insert into Student select 2,N'李四','' insert into Student select 3,N'王五','' insert into Student select 3,N'趙六','' insert into Student select 3,N'馬七',''

?

--假設由于業(yè)務變更,我們需要給Student表新增非空IdNumber字段--

明天繼續(xù)....

轉載于:https://www.cnblogs.com/event/p/6433544.html

總結

以上是生活随笔為你收集整理的使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。