Constraint4:default约束
默认值约束(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约束的更多相关文章
- SQL DEFAULT 约束
DEFAULT 约束用于向列中插入默认值. 如果没有规定其他的值,那么会将默认值添加到所有的新记录. 下面的 SQL 在 "Persons" 表创建时为 "City&qu ...
- SQLServer之修改DEFAULT约束
使用SSMS数据库管理工具修改DEFAULT约束 1.连接数据库.选择数据表->右键点击->选择设计. 2.在表设计器窗口->选中要修改的数据列->在列属性中找到默认值绑定-& ...
- SQLServer之DEFAULT约束
DEFAULT约束添加规则 1.若在表中定义了默认值约束,用户在插入新的数据行时,如果该行没有指定数据,那么系统将默认值赋给该列,如果我们不设置默认值,系统默认为NULL. 2.如果“默认值”字段中的 ...
- SQLServer 中有五种约束, Primary Key 约束、 Foreign Key 约束、 Unique 约束、 Default 约束和 Check 约束
一直在关注软件设计方面,数据库方面就忽略了很多,最近在设计数据库时遇到了一些小麻烦,主要是数据库中约束和性能调优方面的应用,以前在学习 Sql Server 2000,还有后来的 Sql Server ...
- 约束3:default约束
默认值约束(Default约束)的作用是在执行insert命令时,如果命令没有显式给指定的列赋值,那么把默认约束值插入到该列中:如果在Insert命令中显式为指定的列赋值,那么将该列插入用户显式指定的 ...
- SQL-W3School-高级:SQL DEFAULT 约束
ylbtech-SQL-W3School-高级:SQL DEFAULT 约束 1.返回顶部 1. SQL DEFAULT 约束 DEFAULT 约束用于向列中插入默认值. 如果没有规定其他的值,那么会 ...
- mysql DEFAULT约束 语法
mysql DEFAULT约束 语法 作用:用于向列中插入默认值. 说明:如果没有规定其他的值,那么会将默认值添加到所有的新记录.直线电机 mysql DEFAULT约束 示例 //在 "P ...
- 判断表字段是否存在default约束
sql语句 IF NOT EXISTS ( SELECT * FROM dbo.syscolumns WHERE id = OBJECT_ID('[dbo].[TActScoreReceiveRec] ...
- sql在添加新列时同时指定default约束名称
alter table tab_testadd col_test NOT NULL CONSTRAINT DFtab_test_col_test DEFAULT 1 引用:http://www.uzz ...
随机推荐
- (转) 注意啦,笔记本是无线的,虚拟机上网方式莫用NAT,好难整。
有线网络 在有线网络的条件下,vmware的安装非常简单,上网方式几乎不用怎么设置(默认 NAT模式) 如果默认情况下不能上网,则按以下步骤尝试: ************************** ...
- 【转】Java提高篇(三四)-----fail-fast机制
转自:http://blog.csdn.net/chenssy/article/details/38151189 在JDK的Collection中我们时常会看到类似于这样的话: 例如 ...
- ACM: Gym 101047K Training with Phuket's larvae - 思维题
Gym 101047K Training with Phuket's larvae Time Limit:2000MS Memory Limit:65536KB 64bit IO F ...
- matlab 求解线性方程组之范数
1.赋范线性空间和内积空间 在线性代数的初级教材里,一般是在向量空间中定义内积,然后再由内积来导出范数,比如在n维实向量空间中: |x||=√<x,x> 在线性代数的高级教材中,一般是将内 ...
- 【填坑】bzoj3224 splay裸题
人生第一道splay不出所料是一道裸题,一道水题,一道2k代码都不到的题 #include <cstdio> ,n,p,q; ],c[][],size[],sp[]; void rot(i ...
- PO,VO,BO,DTO,POJO(POCO),DAO的区别(转载)
PO:persistant object持久对象 最形象的理解就是一个PO就是数据库中的一条记录.好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象. BO:business object业 ...
- db2 日期时间格式
db2日期和时间常用汇总 1.db2可以通过SYSIBM.SYSDUMMY1.SYSIBM.DUAL获取寄存器中的值,也可以通过VALUES关键字获取寄存器中的值. SELECT 'HELLO DB2 ...
- libCURL开源库在VS2010环境下编译安装,配置详解
libCURL开源库在VS2010环境下编译安装,配置详解 转自:http://my.oschina.net/u/1420791/blog/198247 http://blog.csdn.net/su ...
- Android Intent Flags
Intent,顾名思义,即意图,通常用它来启动一个应用程序组件( Activity, Service, 或者 BroadCast Receiver ).在启动一个新的 Activity 时,可以通过给 ...
- windows 环境和linux环境下 ping命令的区别:
Ping 是Windows自带的一个DOS命令.利用它可以检查网络是否能够连通,用好它可以很好地帮助我们分析判定网络故障.该命令可以加许多参数使用,键入Ping按回车即可看到详细说明.Ping 命令可 ...