SQL 字段约束

概述

SQL 字段的约束是保证字段内容符合要求的一种方法,有 大约束,MySQL 只支持其中 五种,还有一种语法不报错,但没有实际的作用。

六大约束

  • primary key(主键):唯一,不能为空。
  • not null(非空):不能为空。
  • default(默认值):字段默认值。
  • unique(唯一):唯一,能为空。
  • foreign key(外键):为了使两张表的数据更好的关联。
  • check(内容检查 MySQL 不支持):检查内容是否要求。

使用

本质是两种不同的写法,效果没有区别

列级约束

create table stuinfo.sinfo(
    id int primary key, # 主键
    name varchar(20) not null, # 不能为空
    sex enum("男","女") default "女", # 检查 & 默认值
     stuid int unique, # 唯一值
    skilltype int references stype(id) # 外键
) 

# 类型表 用以外键关联
create table stuinfo.stype(
    id int,
    skill varchar(255) not null
)

表级约束

表级约束中,不能设置 not nulldefault

关键字 constraint 是可以省略的

create table stuinfo.sinfo(
    id int , 
    name varchar(20) not null, 
    sex enum("男","女"), 
     stuid int, 
    skilltype int,

    # constraint 别名 约束
    constraint id_pk primary key(id), # 主键
    constraint sec_ck check(sex in("男","女")), # 检查点
    constraint stuid_un unique(stuid), # 唯一键
    constraint st_fk foreign key(skilltype) references stype(id) # 外键
) 

# 类型表
create table stuinfo.stype(
    id int,
    skill varchar(255) not null
)

主键和唯一

关键字 唯一性 是否允许为空 一个表中是否能有多个 是否允许组合
primary key × × √(不推荐)
unique √(不推荐)
  • 设置字段约束组合需要 表级约束

    create table stuinfo.sinfo(
      id int , 
      name varchar(20) not null, 
      sex enum("男","女"), 
    
      /*
      组合主键
      两个字段组成唯一性
      */
      id_pk primary key(id,name), 
    )
    

字段约束的修改

添加字段时加上约束

alter table 表名 modify column 字段名 约束;

修改约束

新旧字段名一样时,就是修改类型、约束。

alter table 表名 change column 旧字段名 新字段名 约束;
发表评论 / Comment

用心评论~