默认值约束(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)

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

  1. SQL DEFAULT 约束

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

  2. SQLServer之修改DEFAULT约束

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

  3. SQLServer之DEFAULT约束

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

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

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

  5. 约束3:default约束

    默认值约束(Default约束)的作用是在执行insert命令时,如果命令没有显式给指定的列赋值,那么把默认约束值插入到该列中:如果在Insert命令中显式为指定的列赋值,那么将该列插入用户显式指定的 ...

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

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

  7. mysql DEFAULT约束 语法

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

  8. 判断表字段是否存在default约束

    sql语句 IF NOT EXISTS ( SELECT * FROM dbo.syscolumns WHERE id = OBJECT_ID('[dbo].[TActScoreReceiveRec] ...

  9. sql在添加新列时同时指定default约束名称

    alter table tab_testadd col_test NOT NULL CONSTRAINT DFtab_test_col_test DEFAULT 1 引用:http://www.uzz ...

随机推荐

  1. 【加精】手机话费充值API接口(PHP版)

    电商周年庆,公司搞了一个关注微信公众号送小额话费的活动,送1元.2元.5元.10元.20元.50元等不同面值的. 为了实现话费充值服务,找了多家开通了话费接口服务,接入后测试.先是做接口整合的平台,P ...

  2. 浅谈ajax

    Ajax 回顾 最本质的 ajax 其实是这样的: function Ajax(){ var xmlHttpReq = null; if (window.ActiveXObject){//IE5 IE ...

  3. BZOJ 2048 题解

    2048: [2009国家集训队]书堆 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1076  Solved: 499[Submit][Status ...

  4. Ubuntu创建桌面快捷方式

    默认情况下,ubuntu会将自动安装的软件快捷方式保存在/usr/share/applications目录下,如果我们要创建桌面快捷方式,只需要右键-复制-桌面 就Ok,如图: 上面的方法是通过系统自 ...

  5. DirectX游戏编程(一):创建一个Direct3D程序

    一.环境 Visual Studio 2012,DirectX SDK (June 2010) 二.准备 1.环境变量(如没有配置请添加) 变量名:DXSDK_DIR 变量值:D:\Software\ ...

  6. Android通用流行框架大全

    1. 缓存 名称 描述 DiskLruCache Java实现基于LRU的磁盘缓存 2.图片加载 名称 描述 Android Universal Image Loader 一个强大的加载,缓存,展示图 ...

  7. springMVC4 注解配置实例

    结构: maven配置: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// ...

  8. java并发编程(十三)经典问题生产者消费者问题

    生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据. 这里实现如下情况的生产--消费模型: 生产者不断交替地生产两组数据&q ...

  9. GDB调试汇编分析

    GDB调试汇编分析 代码 本次实践我参照了许多先做了的同学的博客,有卢肖明,高其,张梓靖同学.代码借用的是卢肖明同学的代码进行调试运行. GCC编译 使用gcc -g gdbtest.c -o gdb ...

  10. 《Linux内核设计与实现》读书笔记 第十八章 调试

    第十八章调试 18.1 准备开始          需要准备的东西: l  一个bug:大部分bug通常都不是行为可靠而且定义明确的 l  一个藏匿bug的内核版本:找出bug首先出现的版本 l  相 ...