zoukankan      html  css  js  c++  java
  • 约束3: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)

  • 相关阅读:
    python 3.8获取当前时间
    .Net Core WebApi 添加Swagger和Redis缓存
    缓存一【微软自带的类库System.Web.Caching】
    rabbitMQ安装运行
    layui添加阿里巴巴图标库
    github无法访问,链接超时解决办法
    Layui + zTree注意事项
    EFCore CodeFirst需要引用的包
    python练习题【杭州多测师】【杭州多测师_王sir】
    mysql数据库题目【多测师_王sir】【杭州多测师】
  • 原文地址:https://www.cnblogs.com/ljhdo/p/4984278.html
Copyright © 2011-2022 走看看