1. 程式人生 > >SQLServer之DEFAULT約束

SQLServer之DEFAULT約束

dde 工具 定義 where span 不存在 extend end 操作

原文:SQLServer之DEFAULT約束

DEFAULT約束添加規則

1、若在表中定義了默認值約束,用戶在插入新的數據行時,如果該行沒有指定數據,那麽系統將默認值賦給該列,如果我們不設置默認值,系統默認為NULL

2、如果“默認值”字段中的項替換綁定的默認值(以不帶圓括號的形式顯示),則將提示你解除對默認值的綁定,並將其替換為新的默認值。

3、若要輸入文本字符串,請用單引號 (‘) 將值括起來;不要使用雙引號 ("),因為雙引號已保留用於帶引號的標識符。

4、若要輸入數值默認值,請輸入數值並且不要用引號將值括起來。

5、若要輸入對象/函數,請輸入對象/函數的名稱並且不要用引號將名稱括起來。

使用SSMS數據庫管理工具添加DEFAULT約束

1、連接數據庫,選擇數據表-》右鍵點擊-》選擇設計。

技術分享圖片

2、在表設計窗口中-》選擇數據列-》在列屬性窗口中找到默認值或綁定-》輸入默認值(註意默認值的數據類型和輸入格式)。

技術分享圖片

3、點擊保存按鈕(或者ctrl+s)-》刷新表-》再次打開表查看結果。

技術分享圖片

使用T-SQL腳本添加DEFAULT約束

當表結構已存在時

首先判斷表中是否存在默認約束,如果存在則先刪除默認約束再添加,如果不存在則直接添加。

語法:

use 數據庫
go
--判斷默認約束是否存在,如果存在則先刪除,如果不存在則直接添加
if exists(select * from sysobjects where name=約束名)


alter table 表名 drop constraint 約束名;
go
--給指定列添加默認約束
alter table 表名 add constraint 約束名 default(約束值) for 列名;
go

示例:

use [testss]
go
--判斷默認約束是否存在,如果存在則先刪除,如果不存在則直接添加
if exists(select * from sysobjects where name=‘defalut_height‘)
alter table [testss].[dbo].[test1] drop constraint defalut_height;
go
--給指定列添加默認約束


alter table [testss].[dbo].[test1] add constraint defalut_height default(160) for height;
go

技術分享圖片

技術分享圖片

創建表時添加默認約束

首先判斷表是否選在,如果存在則先刪除表再添加,如果不存在則直接添加。

語法:

--創建新表時添加默認約束
--數據庫聲明
use 數據庫名
go
--如果表已存在則先刪除表再創建,如果表不存在則直接創建
if exists(select * from sysobjects where name=表名 and type =‘U‘)
drop table 表名;
go
--建表語法聲明
create table 表名
(
--字段聲明
列名 列類型 identity(1,1) not null,
列名 列類型) null,
列名 列類型 null,
列名 列類型 null,
列名 列類型,
列名 列類型 constraint 約束名 default 默認值,
primary key clustered(列名 asc) with(ignore_dup_key=off) on [primary] --主鍵索引聲明
)on [primary]

--字段註釋聲明
exec sys.sp_addextendedproperty @name=N‘MS_Description‘, @value=N‘列說明‘ , @level0type=N‘SCHEMA‘,
@level0name=N‘dbo‘, @level1type=N‘TABLE‘,@level1name=N‘表名‘, @level2type=N‘COLUMN‘,@level2name=N‘列名‘;

exec sys.sp_addextendedproperty @name=N‘MS_Description‘, @value=N‘列說明‘ , @level0type=N‘SCHEMA‘,
@level0name=N‘dbo‘, @level1type=N‘TABLE‘,@level1name=N‘表名‘, @level2type=N‘COLUMN‘,@level2name=N‘列名‘;

exec sys.sp_addextendedproperty @name=N‘MS_Description‘, @value=N‘列說明‘ , @level0type=N‘SCHEMA‘,
@level0name=N‘dbo‘, @level1type=N‘TABLE‘,@level1name=N‘表名‘, @level2type=N‘COLUMN‘,@level2name=N‘列名‘;

exec sys.sp_addextendedproperty @name=N‘MS_Description‘, @value=N‘列說明‘ , @level0type=N‘SCHEMA‘,
@level0name=N‘dbo‘, @level1type=N‘TABLE‘,@level1name=N‘表名‘, @level2type=N‘COLUMN‘,@level2name=N‘列名‘;

exec sys.sp_addextendedproperty @name=N‘MS_Description‘, @value=N‘列說明‘ , @level0type=N‘SCHEMA‘,
@level0name=N‘dbo‘, @level1type=N‘TABLE‘,@level1name=N‘表名‘, @level2type=N‘COLUMN‘,@level2name=N‘列名‘;

go

示例:

--創建新表時添加默認約束
--數據庫聲明
use testss
go
--如果表已存在則先刪除表再創建,如果表不存在則直接創建
if exists(select * from sysobjects where name=‘test1‘ and type =‘U‘)
drop table test1;
go
--建表語法聲明
create table test1
(
--字段聲明
id int identity(1,1) not null,
name nvarchar(50) null,
sex nvarchar(50) null,
age nvarchar(50) null,
classid int,
height int constraint default_he default 166,
primary key clustered(id asc) with(ignore_dup_key=off) on [primary] --主鍵索引聲明
)on [primary]

--字段註釋聲明
exec sys.sp_addextendedproperty @name=N‘MS_Description‘, @value=N‘id主鍵‘ , @level0type=N‘SCHEMA‘,
@level0name=N‘dbo‘, @level1type=N‘TABLE‘,@level1name=N‘test1‘, @level2type=N‘COLUMN‘,@level2name=N‘id‘;

exec sys.sp_addextendedproperty @name=N‘MS_Description‘, @value=N‘姓名‘ , @level0type=N‘SCHEMA‘,
@level0name=N‘dbo‘, @level1type=N‘TABLE‘,@level1name=N‘test1‘, @level2type=N‘COLUMN‘,@level2name=N‘name‘;

exec sys.sp_addextendedproperty @name=N‘MS_Description‘, @value=N‘性別‘ , @level0type=N‘SCHEMA‘,
@level0name=N‘dbo‘, @level1type=N‘TABLE‘,@level1name=N‘test1‘, @level2type=N‘COLUMN‘,@level2name=N‘sex‘;

exec sys.sp_addextendedproperty @name=N‘MS_Description‘, @value=N‘年齡‘ , @level0type=N‘SCHEMA‘,
@level0name=N‘dbo‘, @level1type=N‘TABLE‘,@level1name=N‘test1‘, @level2type=N‘COLUMN‘,@level2name=N‘age‘;

exec sys.sp_addextendedproperty @name=N‘MS_Description‘, @value=N‘班級id‘ , @level0type=N‘SCHEMA‘,
@level0name=N‘dbo‘, @level1type=N‘TABLE‘,@level1name=N‘test1‘, @level2type=N‘COLUMN‘,@level2name=N‘classid‘;

go

技術分享圖片

技術分享圖片

DEFAULT約束優缺點

優點:

1、使用默認值可以減少代碼量,新增數據時可以不用寫新增默認值列,執行新增操作時時默認填充。

2、較有利於進行統計和分析,以及方便程序邏輯操作。

缺點:

1、使用不為NULL的默認值,占用了更多的存儲空間。

SQLServer之DEFAULT約束