mysql 约束

mysql 约束

  • 基本介绍
    • 约束用于确保数据库的数据满足特定的商业规则,在mysql中,约束包括:not null , unique,primary key,foreign key, check五种

主键

  • primary key (主键) - 基本使用
-- 字段名 字段类型 primary key
-- 用于唯一的标示表行的数据,当定义主键约束后,该列不能重复
create table t17(id int primary key);
  • 主键细节讨论

    • primary key不能重复而且不能为null
    • 一张表最多只能有一个主键,但可以是复合主键
    -- 什么是复合主键呢?就是指定的主键同时相等,才会进行报错,例子如下
    -- 复合主键
    create table t18(id int,
                    name varchar(32),
                     address varchar(32),
                     primary key(id,address)
                    );
    -- 上面的代码表示,id和address同时相等的时候,才会进行报错,这就是复合主键。
    
    • 主键的指定方式有两种
    • 直接在字段名后指定:字段名 primary key
    • 在表定义最后写 primary key(列名)
    • 使用desc 表名,可以看到primary key的情况
    • 在实际开发过程中,每个表往往都会设计一个主键。

unique(唯一)

  • 当定义了唯一约束后,该列值是不能重复的
字段名 字段类型 unique
  • unique 细节
    • 如果没有指定not null,则unique字段可以有多个null
    • 一张表可以有多个unique字段

not null(非空)

  • 如果在列上定义了not null,那么当插入数据时,必须为列提供数据。
字段名 字段类型 not null

外键

  • foreign key(外键)
    • 用于定义主表和从表之间的关系,外键约束要定义在从表的身上,主表则必须是具有主键约束或是unique越是,当定义外键约束后,要求外键数据必须在主表的主键列存在或是为null
foreign key(本表(从表)字段名) references 主表名(主键字段名或unique字段名)
-- 主表(必须拥有主键或者unique)
create table my_class(
            id int primary key,
            `name` varchar(32) not null
);


-- 从表 
create table my_stu(
         id int primary key,
         `name` varchar(32) not null,
          class_id int,
          foreign key(class_id) references my_class(id)
);
  • foreign key - 细节说明
    • 外键指向的表的字段,要求是primary key 或者是unique
    • 表的类型是innodb,这样的表才支持外键
    • 外键字段的类型行要和主键字段的类型一致(长度可以不同)
    • 外键字段的值,必须在主键字段中出现过,或者为null【前提是外键字段允许为null】
    • 一旦建立主外键关系,数据不能随意删除了。

check

  • 用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求sal列值在1000-2000之间,如果不在1000-2000之间就会提示出错
  • Oracle和sql server 均支持 check,但是mysql5.7目前还不支持check,只做语法校验,但不会生效。
create table ( 
    id int primary key,
    `name` varchar(32),
    sex varchar(6) check(sex in('man','woman')),
    sal double check (sal > 1000 and sal < 2000)
);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GaoJa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值