06 约束

06 约束


一、约束是什么

在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中的数据合法性、有效性、完整性。

二、常见约束分类

  1. 非空约束(not null):约束字段不能为NULL

  2. 唯一约束(unique):约束的字段不能重复

  3. 主键约束(primary key):约束的字段既不能为NULL,也不能重复

    1. 主键的作用:

      • 表的设计三范式有要求,第一范式就要求任何一张表都应该有主键。
      • 主键是这行数据记录的唯一标识
    2. 主键分类

      • 根据主键字段数量划分:

        1. 单一主键(常用,推荐)
        2. 复合主键(多个字段联合起来添加应该主键约束)(不推荐使用,违背三范式)
      • 根据主键性质划分

        1. 自然主键:主键最好是一个与业务没有关系的自然数
        2. 业务主键:主键和系统的业务挂钩,例如:银行卡号,身份证号作为主键(不推荐使用)
  4. 外键约束(foreign key):

  5. 检查约束(check):注意:Oracle数据库支持check约束,MySQL目前不支持该约束。

三、主键的创建

  1. 使用列级约束方式定义主键

    create table t_stu(
        id int primary key,
        no int,
        name varchar(64)
    );
    
  2. 使用表级约束方式定义主键

    create table t_stu(
        id int,
        no int,
        name varchar(64),
        primary key(id)
    );
    
  3. 自然主键的创建一般联合auto_increment使用。

    create table t_stu(
        id int primary key auto_increment,
        no int,
        name varchar(64)
    );
    

四、外键约束

  1. 外键约束相关术语

    • 外键约束:foreign key
    • 外键字段:添加有外键约束的字段
    • 外键值:外键字段中的每一个值
  2. 示例

    <!-- 父表 -->
    t_class
    
    create table t_class(
        cno int,
        cname varchar(64),
        primary key(cno)
    );
    
    
    <!-- 子表 -->
    t_stu
    
    create table t_stu(
        sno int,
        sname varchar(64),
        classno int,
        primary key(sno),
        foreign key(classno) references t_class(cno)
    );
    
    insert into t_class values (100,'xxxxxxxx');
    insert into t_class values (101,'yyyyyyyy');
    insert into t_class values (102,'zzzzzzzz');
    
    insert into t_stu values (1001,'zs1',101);
    insert into t_stu values (1002,'zs2',101);
    insert into t_stu values (1003,'zs3',102);
    <!-- 错误 -->
    insert into t_stu values (1004,'zs4',109);
    
    
  3. 注意:

    1. 用外键引用的表称为‘子表’,被引用的表称为‘父表’。
    2. 引用的外键字段可以不是主键,但必须有unique约束。
    3. 子表的外键只可以是NULL。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值