default约束的作用是在insert语句执行时,如果未显式给column赋值,那么使用default约束定义的默认值给column赋值。每一列只能有一个default约束。
default 约束定义的语法是:
[CONSREAINT constraint_name] DEFAULT constant_expression
DEFAULT
Specifies the value provided for the column when a value is not explicitly supplied during an insert. DEFAULT definitions can be applied to any columns except those defined as timestamp, or those with the IDENTITY property. DEFAULT definitions are removed when the table is dropped. Only a constant value, such as a character string; a scalar function (either a system); or NULL can be used as a default.
constant_expression
Is a constant, NULL, or a system function that is used as the default value for the column.
一,测试用例
create table dbo.dt_default ( id int null constraint DF_ID default 1, -- default(1) code int null ) insert into dbo.dt_default(code) values(3) insert into dbo.dt_default(id,code) values (2,2) update dbo.dt_default set id=default where code=2
1,第一条insert语句,由于未显式给id列赋值,那么在执行insert语句时,将默认值1插入到表中。
2,在update语句中,使用default 关键字对id赋值,那么id的值是default约束定义的值。
对于DEFAULT约束:
1、默认值只在insert语句中使用,在update语句和delete语句中被忽略。
2、如果在insert语句中提供了任意值,那就不使用默认值;如果没有提供值,那么总是使用默认值。
3,在执行update命令时,可以通过使用关键字DEFAULT,表示将更新的值设置为默认值。
二,在执行insert命令时,default 约束和check约束的执行顺序
在执行insert命令时,先执行default约束,后执行check约束。
create table dbo.dt_default_Check ( id int null constraint DF_ID default 0 constraint CK_ID_IsPositive check(id>0), code int null ) insert into dbo.dt_default_Check(code) values(0)
消息 547,级别 16,状态 0,第 1 行
INSERT 语句与 CHECK 约束"CK_ID_IsPositive"冲突。该冲突发生于数据库"db_study",表"dbo.dt_default_Check", column ‘id‘。
语句已终止。
参考文档:
https://msdn.microsoft.com/en-us/library/ms190273(v=sql.110).aspx
https://msdn.microsoft.com/en-us/library/ms188066(v=sql.110).aspx
https://msdn.microsoft.com/en-us/library/ms187742(v=sql.110).aspx
https://msdn.microsoft.com/zh-cn/library/ms174979.aspx