默认值约束(Default约束)的作用是在执行insert命令时,如果命令没有显式给指定的列赋值,那么把默认约束值插入到该列中;如果在Insert命令中显式为指定的列赋值,那么将该列插入用户显式指定的值。每一列只能有一个default约束。默认值约束除了应用于insert命令中,也可以用于update命令,在执行update命令时,如果为一列指定default值,实际上,把该列更新为该列的默认值。

注意:数据库系统有一个隐式的默认值,如果一个数据列可为NULL,那么NULL就是该列的默认值。

定义默认值约束可以在列级别上,也可以在表级别上。在列级别上, default 约束定义的语法是:

[CONSREAINT constraint_name] DEFAULT constant_expression

在表级别上,default 约束定义的语法是:

[ CONSTRAINT constraint_name ] DEFAULT constant_expression FOR column_name

关键字 DEFAULT 为列显式指定一个常量表达式,默认值可以是常量值(Constant),标量函数(Scalar),或者NULL值。由于默认值约束是在插入数据时,为该列应有预先设置的默认值;如果该列会自动产生新值,就不需要定义默认值约束,因此,Default 约束不适用于RowVersion(或Timestamp)类型,或者拥有Identity 属性的列。

一,测试用例

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)

INSERT 语句与 CHECK 约束"CK_ID_IsPositive"冲突。该冲突发生于数据库"db_study",表"dbo.dt_default_Check", column 'id'。语句已终止。

三,在已经存在的表中增加,删除,修改 default约束

1,增加default 约束

为一个已经存在的表增加的default 约束是表级别的约束

alter table dbo.dt_test_default
add constraint DF_Test_ID default(1) for id

2,删除Default 约束

alter table dbo.dt_test_default
drop constraint DF_Test_ID

3,修改default约束
修改default约束的workaround是先删除 default约束,后增加default约束

alter table dbo.dt_test_default
drop constraint DF_Test_ID alter table dbo.dt_test_default
add constraint DF_Test_ID default(2) for id

4,在表中在增加一个新的column,并指定default 约束

alter table dbo.dt_test_default
add sex char(1)
constraint DF_Test_Sex default('M')
constraint CK_Test_Sex check(sex in('M','F'))

参考文档:

table_constraint (Transact-SQL)
column_constraint (Transact-SQL)
ALTER TABLE (Transact-SQL)

约束3:default约束的更多相关文章

  1. SQLServer 中有五种约束, Primary Key 约束、 Foreign Key 约束、 Unique 约束、 Default 约束和 Check 约束

    一直在关注软件设计方面,数据库方面就忽略了很多,最近在设计数据库时遇到了一些小麻烦,主要是数据库中约束和性能调优方面的应用,以前在学习 Sql Server 2000,还有后来的 Sql Server ...

  2. Constraint4:default约束

    Default约束的作用是在insert语句执行时,如果未显式给指定的column赋值,那么使用默认值给column赋值:如果在Insert命令中显式为指定的Column赋值,那么将插入显式值.每一列 ...

  3. SQLServer之修改DEFAULT约束

    使用SSMS数据库管理工具修改DEFAULT约束 1.连接数据库.选择数据表->右键点击->选择设计. 2.在表设计器窗口->选中要修改的数据列->在列属性中找到默认值绑定-& ...

  4. SQLServer之DEFAULT约束

    DEFAULT约束添加规则 1.若在表中定义了默认值约束,用户在插入新的数据行时,如果该行没有指定数据,那么系统将默认值赋给该列,如果我们不设置默认值,系统默认为NULL. 2.如果“默认值”字段中的 ...

  5. SQL DEFAULT 约束

    DEFAULT 约束用于向列中插入默认值. 如果没有规定其他的值,那么会将默认值添加到所有的新记录. 下面的 SQL 在 "Persons" 表创建时为 "City&qu ...

  6. postgresql数据库primary key约束/not null约束/unique约束及default值的添加与删除、列的新增/删除/重命名/数据类型的更改

    如果在建表时没有加primary key约束.not null约束.unique约束.default值,而是创建完表之后在某个字段添加的话 1.primary key约束的添加与删除 给red_pac ...

  7. SQL-W3School-高级:SQL DEFAULT 约束

    ylbtech-SQL-W3School-高级:SQL DEFAULT 约束 1.返回顶部 1. SQL DEFAULT 约束 DEFAULT 约束用于向列中插入默认值. 如果没有规定其他的值,那么会 ...

  8. mysql DEFAULT约束 语法

    mysql DEFAULT约束 语法 作用:用于向列中插入默认值. 说明:如果没有规定其他的值,那么会将默认值添加到所有的新记录.直线电机 mysql DEFAULT约束 示例 //在 "P ...

  9. SQL PRIMARY KEY 约束\SQL FOREIGN KEY 约束\SQL CHECK 约束

    SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主 ...

随机推荐

  1. Spring MVC Hello World 404

    下面的例子说明了如何使用 Spring MVC 框架来编写一个简单的基于 web 的 Hello World 应用程序.下面让我们使用 Eclipse IDE,然后按照下面的步骤使用 Spring 的 ...

  2. $.ajax 在请求没有完成,是可以往下继续执行js代码的

    $.ajax({ url:url, data:{}, success:function(arr) { var varHtml='<option value="" checke ...

  3. QT导入libcurl支持HTTPS

    对于我这种不会编译的人来说,必须找到已经编译好的DLL文件,以及头文件才能使用. 幸运的在这个网站https://stackoverflow.com/questions/28137379/libcur ...

  4. 【转】.NET Core基于. csproj 配置文件发布项目

    一.前言 .NET工具链在最新的Preview3版本中,引入了新的MSBuild项目系统,项目文件又回归了.csproj的XML文件来管理,项目文件.包引用.程序集引用..NET Core工具集.发布 ...

  5. Angular总结一:环境搭建

    工欲善其事必先利其器,开发 Angular 项目首先要搭建环境.Angular 的环境搭建包括三个方面,开发环境 WebStorm,命令行工具 Angular CLI,以及 nodejs. 一.安装 ...

  6. Python time.md

    time模块 Comparing Clocks time.clock():在Unix 上,返回当前的处理器时间,以浮点数秒数表示. time.monotonic():返回一个单调时钟的值(在分秒内), ...

  7. 有料面试题之--Object里面的方法

    阿里的面试题里面有个题很奇妙:你知道Object类里面有哪些方法吗? 绝大部分猿类都知道 有hashcode .equals .clone.toString 只有部分人会回答有 wait和notify ...

  8. jenkins 调用 k8s api

    delete_old_images() { #删除以前的镜像,节省本地空间 if docker images | grep $javaname ; then docker rmi -f `docker ...

  9. CentOS 7中为Yum设置代理

    公司给的Linux机器,默认没给联网,然后安装Docker时流程走不下去,找IT半天没人回,然后我就自己折腾,各种配置系统代理,结果并没有成功,最后发现yum可以单独为yum设置代理,方式如下: YU ...

  10. CanOpen协议【CanFestival】移植方法 支持VC、QT、STM32

    前段时间学习了CanOpen协议,到网上下载的CanFestival3-10源码,移植到VC.QT.STM32等平台,由于网上的资源较少,走了不少弯路,移植好使用过程中才逐渐暴露出各种问题,比如OD字 ...