• TSQL--约束基础和Demo


    --============================================================

    SQL SERVER 中使用constraint和role来对数据进行限制,role需要先创建,再应用到指定的表和列上,role可以被应用到多个对象上。而constraint只能针对单一对象,处理的问题更多一些,constraint可以跨越多个表处理,如限制某个表中输入的值不能大于另一表的最大值,role无法实现这样的需求。通常优先考虑使用constraint来实现对数据的限制。

    SQL Server中约束有:
    check constraint
    unique constraint
    primary key constraint
    default constraint

    可以使用
    SELECT * FROM SYS.default_constraints
    SELECT * FROM sys.check_constraints
    select * from sys.key_constraints
    来查看约束

    --============================================================

    完整性检查顺序

    1. 应用适当的默认值
    2. 检查NOT NULL
    3. check constraint
    4. 对引用表的外键约束
    5. 对被引用表的外键约束
    6. 唯一或主键约束
    7. 触发器

    --============================================================

    约束的一些Demo

    --======================================
    --创建表时创建check约束
    CREATE TABLE TB14
    (
       ID INT IDENTITY(1,1),
       C1 INT,
       CONSTRAINT chk_TB14_C1 CHECK(C1>0)
    )
    --======================================
    --修改表创建check约束
    CREATE TABLE TB15
    (
       ID INT IDENTITY(1,1),
       C1 INT
    )
     
    ALTER TABLE TB15
    ADD CONSTRAINT chk_TB15_C1 CHECK(C1>0)
    --======================================
    --修改表创建check约束,并且不检查已有数据
    CREATE TABLE TB15
    (
       ID INT IDENTITY(1,1),
       C1 INT
    )
    INSERT INTO TB15(C1)
    SELECT -1
     
    ALTER TABLE TB15
    WITH NOCHECK
    ADD CONSTRAINT chk_TB15_C1 CHECK(C1>0)
    
    --======================================
    --禁用已有约束
    ALTER TABLE TB15
    NOCHECK CONSTRAINT chk_TB15_C1
     
    INSERT INTO TB15(C1)
    SELECT -1
    --======================================
    --启用用已有约束
    ALTER TABLE TB15
    CHECK CONSTRAINT chk_TB15_C1
     
    View Code
     --===============================================
    --在创建表时指定主键,并且生出非聚簇索引
    CREATE TABLE TB16
    (
       ID INT IDENTITY(1,1),
       C1 INT NOT NULL,
       CONSTRAINT pk_TB15_ID PRIMARY KEY NONCLUSTERED(ID)
    )
    
    --在新建主键或唯一约束是,使用WITH NOCHECK来避免检查当前数据
    --默认条件下主键约束会附带生成聚簇索引,而唯一约束会附带生成非聚簇索引。
    View Code
    --==============================
    --在表创建时使用DEFAULT 约束
    CREATE TABLE TB12
    (
       ID INT IDENTITY(1,1),
       C1 INT DEFAULT 0
    )
    --==============================
    --在修改表时使用DEFAULT 约束
    CREATE TABLE TB13
    (
       ID INT IDENTITY(1,1),
       C1 INT NOT NULL,
       C2 INT NOT NULL
    )
     
    ALTER TABLE TB13
    ADD CONSTRAINT DF_TB13_ID  DEFAULT 0 FOR C1
     
    --=======================================
    --在插入时显式使用默认值
    INSERT INTO TB12(C1)
    VALUES(DEFAULT)
     
    --=======================================
    --在插入时隐式使用默认值
    INSERT INTO TB13(C2)
    VALUES(1)
    --=======================================
    --在更新时显式使用默认值
    UPDATE TB12
    SET C1=DEFAULT
    View Code
    --======================================
    --创建表时创建check约束
    CREATE TABLE TB14
    (
       ID INT IDENTITY(1,1),
       C1 INT,
       CONSTRAINT chk_TB14_C1 CHECK(C1>0)
    )
    --======================================
    --修改表创建check约束
    CREATE TABLE TB15
    (
       ID INT IDENTITY(1,1),
       C1 INT
    )
     
    ALTER TABLE TB15
    ADD CONSTRAINT chk_TB15_C1 CHECK(C1>0)
    --======================================
    --修改表创建check约束,并且不检查已有数据
    CREATE TABLE TB15
    (
       ID INT IDENTITY(1,1),
       C1 INT
    )
    INSERT INTO TB15(C1)
    SELECT -1
     
    ALTER TABLE TB15
    WITH NOCHECK
    ADD CONSTRAINT chk_TB15_C1 CHECK(C1>0)
    
    --======================================
    --禁用已有约束
    ALTER TABLE TB15
    NOCHECK CONSTRAINT chk_TB15_C1
     
    INSERT INTO TB15(C1)
    SELECT -1
    --======================================
    --启用用已有约束
    ALTER TABLE TB15
    CHECK CONSTRAINT chk_TB15_C1
     
     
     
    View Code
  • 相关阅读:
    vue-router HTML5 History 模式(转自官网)
    使用fastjson解析数据后导致顺序改变问题
    Mybatis一对多或多对多只能查出一条数据解决策略
    mybatis 学习教程
    Mybatis根据List批量查询List结果
    @Param注解的用法解析
    关于mybatis使用小于号大于号出错的解决方案
    if test表达式逻辑判断不能用&&
    MyBatis中传入参数parameterType类型详解
    MyBatis 判断条件为等于的问题
  • 原文地址:https://www.cnblogs.com/TeyGao/p/3524281.html
Copyright © 2020-2023  润新知