zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    geoserver发布地图服务WMTS
    geoserver发布地图服务WMS
    geoserver安装部署步骤
    arcgis api 3.x for js 入门开发系列十四最近设施点路径分析(附源码下载)
    arcgis api 3.x for js 入门开发系列十三地图最短路径分析(附源码下载)
    cesium 之自定义气泡窗口 infoWindow 后续优化篇(附源码下载)
    arcgis api 3.x for js 入门开发系列十二地图打印GP服务(附源码下载)
    arcgis api 3.x for js 入门开发系列十一地图统计图(附源码下载)
    arcgis api 3.x for js 入门开发系列十叠加 SHP 图层(附源码下载)
    arcgis api 3.x for js入门开发系列九热力图效果(附源码下载)
  • 原文地址:https://www.cnblogs.com/TeyGao/p/3524281.html
Copyright © 2011-2022 走看看