• 003 约束和关系


    /*
    时间:2020/09/06
    功能:
        一 约束
            1 概念
            2 操作
            
        二 关系
            1 概念
            2 操作
    */    
        
        


    一 约束
      1 概念

    /*
    约束
        1 定义: 对一个表中属性进行限制。
        2 具体
            (1) 主键约束: 不允许重复元素,避免数据
            (2) 外键约束: 保证本表数据与其他表数据存在关联。
            (3) check约束: 保证事物check列属性取值在合理范围
            (4) default约束: 保证事物default列属性有默认值,一定有一个值。
            (5) unique约束: 保证事物属性不允许重复
                    (a) SqlServer 只允许unique列一个为null
                    (b) Oracle 允许unique列多个为null
            (6) not null: 该列不能为空。
            
        3 对比:
            (1) null和default
                    (a) 相同: 允许用户不赋值
                    (b) 不同: null默认是null, default默认是指定值。
            
    表和约束:
        1 数据库通过表解决事物的数据,存储和复杂操作问题(增删改查)
        2 数据库通过表解决事物的属性,有效性和合理性问题
            (1) 表内: 表内列属性通过约束,来表示事物局部数据有效性和合理性。
            (2) 表外: 表与表之间通过约束,来表示事物整体数据关联性和完整性。
    */

      2 操作

    create table Student
    (
        stu_id int primary key,
        stu_sal int check (stu_sal >= 1000 and stu_sal <= 8000),
        stu_sex nchar(1) default(''),
        stu_name nvarchar(200) unique
    )
    
    INSERT INTO Student values(4, 6000, '', null)
    INSERT INTO Student values(5, 6000, '', 1)
    
    INSERT INTO Student values(null, 8000, '', 9)    -- 不能将值 NULL 插入列 'stu_id'
    INSERT INTO Student values(4, 6000, '', 100)    -- 违反了 PRIMARY KEY 约束
    INSERT INTO Student values(6, 12000, '', 2)    -- 与 CHECK 约束"CK__Student__stu_sal__0EA330E9"冲突
    
    INSERT INTO Student values(7, 6000, '', 1)    -- 违反了 UNIQUE KEY 约束
    INSERT INTO Student values(8, 8000, '', 2)    -- 执行成功
    
    insert into student(stu_id, stu_sal, stu_name) values (1, 1000, '榨汁机');
    
    SELECT * FROM Student

    二 关系
      1 概念

    /*
    关系:
        1 定义: 表和表之间的联系
        2 实现: 设置外键
        3 分类: 
            (1) 一对一: 既可以把表A主键充当表B的外键,也可以把表B的主键充当表A的外键。
            (2) 一对多: 把表A主键充当表B的外键。
            (3) 多对多: 通过单独的一张表来表示。
    */

      2 操作

    -- 班级表
    use TestData
    create table banji
    (
        banji_id int primary key,
        banji_num int not null,
        banji_name nvarchar(100)
    )
    
    -- 教师
    create table jiaoshi
    (
        jiaoshi_id int primary key,
        jiaoshi_name nvarchar(200)
    )
    
    -- 第三张表 : 模拟班级和教师关系
    create table banji_jiaoshi_mapping
    (
        banji_id int constraint fk_banji_id foreign key references banji(banji_id),
        jiaoshi_id int foreign key references jiaoshi(jiaoshi_id),
        kecheng nvarchar(20),
        constraint pk_banji_id_jiaoshi_id primary key(banji_id, jiaoshi_id, kecheng)
    )

      

    select *
        from banji
    
    select *
        from jiaoshi
    
    select *
        from banji_jiaoshi_mapping

  • 相关阅读:
    软件开发流程
    计算机与生命体的类比
    cnBeta过期评论查看器,再次更新
    用Ruby写的离线浏览代理服务器,重要更新
    计算机编程常用词汇
    网站创意:商品知识库
    Node.JS进行简单新技术分析及环境搭建
    MongoDB (0)写在前面
    基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)
    MongoDB (5)不仅仅是数据库
  • 原文地址:https://www.cnblogs.com/huafan/p/13623128.html
Copyright © 2020-2023  润新知