MySQL基础(三)——约束

时间:2023-03-08 22:45:48
MySQL基础(三)——约束

MySQL基础(三)——约束

  约束是在表上强制执行的数据校验规则,主要用于维护表中数据的完整性以及当数据之间有以来关系时,保护相关的数据不会被删除。

  根据约束对列的限制,可以划分为:单列约束(只约束一列)和多列约束(同时约束多列)。

  约束可以在创建表时,为对应的数据列增添约束,也可以在创建表后,用修改表的方式来增加约束。

1.not null约束

  非空约束。

  确保指定的列不为空,此约束只能作为列级约束使用。在SQL中,所有的数据类型的值都可以是null,但是要注意空字符串不是null,0也不是null。

#创建表时为字段添加not null约束
create table stu(
    s_id int not null,
    s_name )
);
#修改表结时为字段添加not null约束
alter table stu
modify
s_name ) not null;

2.unique约束

  唯一约束,用于保证指定列或者指定列的组合不出现重复值,但是要注意的是,虽然被unique约束的列或者列组合不许出现重复值,但是可以出现多个null值。

  创建表时建立唯一约束:

#创建表时,使用列级约束语法建立约束
create table student(
    #使用列级约束语法建立唯一约束
    s_name ) unique
);
#创建表时,使用表级约束语法建立约束
create table studetn(
    s_id int not null,
    s_username ),
    s_password )
    #使用表级约束建立唯一约束(这里是组合约束)
    constraint uk unique (s_username,s_password)
);

  修改表时使用add关键字或者modify关键字增加约束

#新建一个表,没有任何约束
create table teacher(
    t_id int,
    t_username ),
    t_password )
);
#使用add关键字在修改表时,为列添加unique约束,这里是列组合
alter table teacher
add unique(t_username,t_password);
#使用modify关键字在修改列定义时,增加unique约束
alter table teacher
modify t_id int unique;

3.primary key约束

  primary key约束的效果为not null约束效果和unique约束效果之和,即不允许出现null也不允许出现重复值。如果对多列组合进行primary key约束,则多列里包含的每一列都不能为null,但只要求这些列组合不能重复。这个是什么意思嘞。。。就是在同一列可以有重复的值,但是嘞,把这些列的值组合到一起不能有重复的。。。

  在创建了主键约束时,MySQL会在主键约束所在的列或者列组合上建立对应的唯一索引。

#创建表时建立列的主键约束,使用列级语法
create table stu(
    #使用列级语法建立主键约束
    s_id int primary key,
    s_name )
);
#创建表时建立列组合的主键约束,只能使用表级约束语法
create table teacher(
    t_id int,
    t_name ),
    #在MySQL中指定主键约束名是无效的,无论如何指定
    #他的约束名都是primary
    primary key(t_id,t_name)
);

  删除主键约束

#在修改表中删除指定表的主键约束
alter table stu
drop primary key;

  增加主键约束

#修改表时通过使用modify关键字,用列级语法添加primary key约束
alter table stu
modify s_name ) primary key;
#修改表时通过使用add关键字,用表级语法添加primary key约束
alter table stu
add
primary key(s_id,s_name);

  自增长:MySQL对主键列支持自增长的特性,即如果某个数据列的类型是整型,而且该列作为主键列,则可指定该列具有自增长功能。指定自增长功能通常用于设置逻辑主键列——该列的值没有任何物理意义,仅仅用于标识每行记录。MySQL使用auto_increment来设置自增长。

#一旦指定了某列具有自增长特性,则向该表插入记录时可不为该列指定值
#该列的值由数据库系统自动生成
create table test(
    #建立主键约束,使用自增长
    id int auto_increment primary key,
    name ),
    pass )
);

4.foreign key约束

  外键约束主要用于保证一个或者两个数据表之间的参照完整性,外键是构建于一个表的两个字段或者两个表的两个字段之间的参照关系。外键确保相关的两个字段的参照关系:子表外键列的值必须在主表被参照列的值范围内,或者为空。

  当主表的记录被从表记录参照时,主表在从表中参照该记录的所有记录删除之前,不能删除此记录。只有当从表里参照该记录的所有记录全部删除后,才可以删除主表中的该记录,也可以删除主表记录时级联删除从表中所有参照该记录的从表记录。

  foreign key约束的主要作用是防止表之间的连接被破坏;同时,由于外键列的值只能是被参照列的值的范围内的值,这样也防止了在外键列插入非法的数据。

foreign key在一对一关系中的使用:

  可以在任意一张表上建立外键列。

foreign key在一对多关系中的使用:

  在一对多的关系中,外键列通常被设置在多的一端,例如一个老师对应许多的学生,那么我们在学生端设置外键列,该列保存该学生对应的老师端的主键值。

例:

#简单的两张表
#教师表:教师id 姓名
create table teacher(
  #列级约束,指定主键
  t_id int primary key,
  t_name )
);
#学生表:学号 姓名 教师id
create table student(
    #列级约束,指定主键
    s_id int primary key,
    s_name ),
    tea_id int references teacher(t_id)
);

  哈哈,上边的列级语法的foreign key在MySQL中不会生效的,在MySQL中只能用表级约束语法,才会使foreign key生效。所以我们把学生表的创建改成使用表级约束语法。

foreign key在多对多关系中的使用:

5.check约束