DDL-约束介绍

约束用于限制表中数据,确保数据的可靠性

常见约束

类型 功能
not null 非空约束,保证数据不为null
default 默认约束,在不输入时保证字段有默认值
primary key 主键,保证字段唯一性,且非空
unique 唯一,保证字段唯一性,但可以为null(null只能有一个)
foreign key 外键,显示两表关系,保证字段值来自于主表关联列的值
check 检查,用于对字段值添加限制(mysql中不支持:无效但不报错)

添加约束

创建表时添加

基本语法:

1
2
3
4
5
create table TableName(
column1 type1 constraint1, #此时constraint1、2为列约束
column2 type2 constraint2,
constraint constName constType [references Table1(column3)] #此时constName为表约束
);

[]内类容为使用foreign key时需要添加的关联列

  1. 列级约束,所有约束均可按照列级约束添加,但foreign key外键约束无效。

  2. 表级约束:除not nulldefault外的约束,均可作为表级约束。

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    create database students;
    use students;

    create table major(
    id int primary key,
    majorName varchar(20)
    );

    #列级约束
    create table stuinfo(
    id int primary key,
    stuName varchar(20) not null,
    gender char(1) check(gender='男' or gender='女'),#mysql中无效
    seat int unique,
    age int default 18,
    majorId int references major(id) #此处列级外键无效
    );

    #表级约束
    create table stuinfo(
    id int ,
    stuName varchar(20) ,
    gender char(1) ,
    seat int ,
    age int ,
    majorId int,
    constraint pk primary key(id),
    constraint uq unique(seat),
    constraint ck check(gender='男' or gender='女'),
    constraint fk_stu_major foreign key(majorid) references major(id)
    );
在修改过程中添加、删除
  • 添加约束语法
1
2
3
#约束添加
alter table tablename modify column column1 type constraint1;#添加列级约束
alter table tablename add constraint1(column); #添加表级约束

其中constraint1代表对应约束语句,具体格式见上文

  • 删除约束语法

    列级约束删除

    1
    2
    3
    4
    5
    #删除非空约束
    alter table TableName modify column CloumnName type null;

    #删除默认约束
    alter table TableName modify column CloumnName type;

    表级约束删除

    1
    alter table TableName drop constraint_Type constraint_Name;

    由于 primary只有一个,因此可省略constraint_Name

特别注意
  • 主键

    • 同一个表中,unique可以有多个,但primary key只能有一个

    • 可以将多个列组合成一个主键,其格式如

      1
      constraint pk primary key(column1,column2)
  • 外键

    • 在从表中设置外键关系
    • 从表列于主表关联列的类型要相同(或者兼容)
    • 主表中的关联列必须是一个键(一般为primary key或者unique

标识列

与约束类似,在创建表时添加:

1
2
3
4
5
6
7
8
#设置自增长标识列
create table TableName(
ColumnName type unique auto_increment,
ColumnName2 type2
);

#设置增长步长
set auto_increment_increment = N;

在修改时添加、删除:

1
2
3
4
5
#添加标识列
alter table tablename modify column column1 type constraint1 auto_increment;

#删除标识列(即修改后不添加标识)
alter table TableName modify column CloumnName type constraint1;

标识列必须为一个key(如primary,unique)

一个表中仅能有一个自增长列