zoukankan      html  css  js  c++  java
  • SQL数据库约束、默认和规则

    数据的完整性

    实体完整性 又称为行完整性,即数据库中的所有行都具有一个非空且没有重复的主键值

    MSSQL中通过唯一索引、PRIMARY KEY约束、UNIQUE约束、INDENTITY属性等来强制主键的唯一性

    域完整性  又叫列完整性,以保证列数据的输入具有正确的数据类型、格式和有效的数据范围

    强制域有效性可以通过限制数据类型、CHECK约束和规则、FOREIGN KEY、DEFAULT、NOTNULL定义

    参照完整性 又叫引用完整性,旨在保证主表和从表数据的一致性,通过FOREIGN KEY和CHECK约束实现

    用户定义完整性  用户定义的不属于以上完整性的特点那个规则

    SQL数据库约束、默认和规则

    1)约束 CONSTRAINT

    实现约束的五种方式:

    (1) CHECK约束

    [CONSTRAINT 约束名] CHECK (逻辑表达式)

    CREATE TABLE 成绩

    (

    学号 char(8) NOT NULL,

    CONSTRAINT ck_cj CHECK (成绩>=0 and 成绩<=100)

    )

    ALTER TABLE 成绩

    ADD CONSTRAINT ck_cj (成绩>=60 and 成绩<=100)

    ALTER TABLE 成绩

    DROP CONSTRAINT ck_cj

    (2)PRIMARY KEY约束

    [CONSTRAINT 约束名] PRIMARY KEY [CLUSTERED] [NONLUSTERED]

    CREATE TABLE 学生

    (

    学号 char(8) NOT NULL CONSTRAINT pl_xs PRIMARY KEY CLUSTERED

    )

    ALTER TABLE 学生

    ADD CONSTRAINT pk_xs PRIMARY KEY CLUSTERED(学号)

    (3)FOREIGN KEY约束 references

    [CONSTRAINT 约束名] FOREIGH KEY    (从表外键) PEFERENCES 主表 (主表外键)

    CREATE TABLE 成绩

    (

    学号 char(8) NOT NULL FOREIGN KEY REFERENCES 学生 (学号)

    )

    (4)UNIQUE约束

    [CONSTRAINT 约束名] UINQUE [CLUSTEREDNONCLUSTERED](列名...)

    CREATE TABLE 职工

    (

    身份证号 char(18) NULL CONSTRAINT uni_sfz UNIQUE

    )

    (5)DEFAULT约束

    [CONSTRAINT 约束名] DEFAULT 默认约束值 FOR 列名

    CREATE TABLE 学生

    (

    性别 char(2) DEFAULT '男'

    )

     默认[DEFAULT]

    默认是一种数据库对象,可以绑定在一列或者多列上,作用与DEFAULT约束相似,在插入数据行时,为没有指定数据的列提供实现定义的默认值

    创建默认对象

    CREATE DEFAULT 默认对象名 AS 默认值

    USE 学生成绩

    CREATE DEFAULT sex_mr AS '男'

    绑定默认对象

    sp_bindefault [@defname=] '默认对象名' [@objname] '绑定的列名'

    use 学生成绩

    go

    exec sp_bindefault 'sex_mr','学生.性别'

    删除绑定

    sp_unbindefault [@objname=] '绑定的列名'

    use 学生成绩

    go

    exec sp_unbindefault '学生.性别'  

    删除默认对象

    DROP DEFAULT 默认对象名

    use 学生成绩

    go

    drop default sex_mr

    规则(RULE)

    规则也是一种数据库对象,可以绑定在一列或多列上,作用与CHECK约束相似,在插入数据行时,指定接收的数据值的范围

    创建规则

    CREATE RULE 规则名 AS 规则条件

    USE 学生成绩

    go

    create rule cj_rl as @cj>=0 and @cj<=100

    绑定规则

    sp_bindrule [@rulename=] '规则对象名' [@objname] '绑定的列名'

    use 学生成绩

    go

    exec sp_bindrule 'cj_rl','成绩.成绩'

    删除规则

    sp_unbindrule [@objname=] '绑定的列名'

    use 学生成绩

    go

    exec sp_unbindrule '成绩.成绩'

    删除规则对象

    DROP RULE 规则对象名

    use 学生成绩

    go

    drop rule cj_rl

  • 相关阅读:
    【转】小波与小波包、小波包分解与信号重构、小波包能量特征提取 暨 小波包分解后实现按频率大小分布重新排列(Matlab 程序详解)
    IPython:一种交互式计算和开发环境
    python防止字符串转义
    Could not find a version that satisfies the requirement numpy>=1.7.0 (from pan das==0.17.0) (from versions: ) No matching distribution found for numpy>=1.7.0 (from pandas==0.17.0)
    【转】出现“ValueError : numpy.ufunc has the wrong size, try recompiling" 解决方法
    【转】最简单的安装pip的方法
    小波变换教程(十七)
    小波变换补充知识
    小波变换教程(十六)
    C# 保护进程不被结束(源代码)防任务管理器结束进程
  • 原文地址:https://www.cnblogs.com/wcxcc/p/10709432.html
Copyright © 2011-2022 走看看