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

原文地址:https://www.cnblogs.com/huafan/p/13623128.html