默认值约束(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. Linux系统清除多余的账号

    清除多余的账号 注释掉/etc/passwd文件中nologin的行 grep 'nologin' /etc/passwd 注: 目前暂没想到用命令行替换,后面再想想

  2. win10 虚拟机 hyper-v 安装 centos 7

    一.win 10 企业版 自带虚拟机 hyper-v 1.控制面板-->程序和功能-->启用或关闭Windows功能 勾上 hyper-v 确定就ok了 2.安装成功后会发现在 左下角“开 ...

  3. jQuery插件实例三:图片滚动[切换]效果一

    图片切换效果在很多网站上都能看到,是一种常见的广告/活动宣传方式,通常位于网页上端.这个插件是众多图片切换效果的形式中的一种,数据源可在前端配置,也可从后台通JSON格式传输数据,当然,数据格式是固定 ...

  4. #001 Emmet的API图片

    这个是一张Emmet的快捷键图片,里面包含了所有的快捷键. 虽然有很多的快捷键,但是常用的也就那么几个   .   样式 #  ID >  上下级节点 +  .col-md-8+.col-md- ...

  5. 在web.xml中配置404错误拦截

    <error-page> <error-code>404</error-code> <location>/home.do</location> ...

  6. css画图那些事

    上一篇css3写了一些基本的图形,想到是不是能用css3画个动物,便在网上找图片.于是选中一只大鹏鸟 也不难,一步步的写出身体部位,再定位上去就好了.来一张效果图,后面给两个加了动画,稍微难看一点,后 ...

  7. Docker镜像搭建Linux下samba共享目录

    Samba 是 SMB/CIFS 网络协议的重新实现, 它作为 NFS 的补充使得在 Linux.OS/2.DOS 和 Windows 系统中进行文件共享.打印机共享更容易实现.SMB协议是客户机/服 ...

  8. iPhone 电脑备份路径

    C:\Users\iChen\AppData\Roaming\Apple Computer\MobileSync\Backup

  9. 多线程并发容器CopyOnWriteArrayList

    原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容 ...

  10. 469 B. Intercepted Message

    http://codeforces.com/problemset/problem/950/B Hacker Zhorik wants to decipher two secret messages h ...