学无先后,达者为师

网站首页 编程语言 正文

数据库常见约束

作者:~TiAmo~ 更新时间: 2022-07-22 编程语言

含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性

分类:六大约束

      not null:非空,用于保证该字段的值不能为空   如学号、姓名等

      default:默认,用于保证该字段有默认值    如性别

      primary key: 主键,用于保证该字段的值具有唯一性,并且非空  比如学号等

      unique: 唯一,用于保证该字段的值具有唯一性,可以为空  比如学号等

      check:检查约束,mysql不支持

      foreign key:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值

          在从表添加外键约束,用于引用主表中某列的值。   如员工表的部门编号

添加约束的时机:

  1. 创建表时
  2. 修改表时

约束的添加分类:

    列级约束:

        位置在列的后面,六大约束语法上都支持,但外键约束没有效果,不可以起约束名;

    表级约束:

        位置在所有列的下面,除了非空、默认,其他的都支持,可以起约束名但主键没有效果;

一、创建表时添加约束

1、添加列级约束

语法:直接在字段名和类型后面追加约束类型即可。可以追加多个,中间用空格隔开,没有顺序要求。

create table stu(

     id int primary key,

     stuname varchar(20) not null,   #非空

     gender char(1) check( gender=’男’ or gender=’女’),  #检查

     age int default 18    #默认约束

     majorid int references major(id)   #外键

);

查看stu中的所有索引,包括主键、外键、唯一

show index from stu;

2、添加表级约束

语法:在各个字段的最下面

【constraint 约束名】 约束类型(字段名)

create table stu(

     id int,

     stuname varchar(20) ,

     gender char(1) ,

     age int,

     majorid int,

     constraint fk_stu_major foreign key(majorid) references major(id)

);

主键和唯一的大对比:

         保证唯一性    是否允许为空       一个表中可以有多少个        是否允许组合

主键        √                       ×                          至多有1个                    √,但不推荐

唯一        √                       √                          可以有多个                   √,但不推荐

  1. 要求在从表设置外键关系
  2. 从表的外键列的类型和主表的关联列的类型要求一致或兼容
  3. 从表的关联列必须是一个key(一般是主键或唯一)
  4. 插入数据时,先插入主表,再插入从表

删除数据时,先删除从表,再删除主表

可以通过以下两种方式来删除主表的记录

方式一:级联删除

alter table stu add constraint fk_stu foreign key(majorid) references major(id) on delete cascade;

方式二:级联置空

alter table stu add constraint fk_stu foreign key(majorid) references major(id) on delete set null;

二、修改表时添加约束

  1. 添加列级约束

alter table 表名 modify column 字段名 字段类型 新约束;

     2. 添加表级约束

alter table 表名 add 【constraint 约束名】 约束类型(字段名) 外键的引用;

1、添加非空约束

alter table stu modify column stuname varchar(20) not null;

2、添加默认约束

alter table stu modify column age int default 18;

3、添加主键

①列级约束

alter table stu modify column id int primary key;

②表级约束

alter table stu add primary key (id);

4、添加唯一

①列级约束

alter table stu modify column seat int unique;

②表级约束

alter table stu add unique (seat);

5、添加外键

alter table 表名 foreign key(字段名) references 主表(被引用列);

三、修改表时删除约束

1、删除非空约束

alter table stu modify column stuname varchar(20) null;

2、删除默认约束

alter table stu modify column age int;

3、删除主键

alter table stu drop primary key;

4、删除唯一

alter table stu drop index 索引名;

5、删除外键

alter table 表名drop foreign key 约束名;

标识列

   又称为自增长列

   含义:可以不用手动的插入值,系统提供默认的序列值,默认从1开始,步长为1

特点:

  1. 标识列不一定需要和主键搭配,但要求是一个key
  2. 一个表至多有一个标识列
  3. 标识列的类型只能是数值型
  4. 标识列可以通过set auto_increment_increment=值;设置步长

   可以通过手动插入值设置起始值

一、创建表时设置标识列

drop table if exists tab;

create table tab(

     id int primary key auto_increment,

     name varchar(20)

);

二、修改表时设置标识列

   alter table tab_identity modify column id int primary key auto_increment;

三、修改表时删除标识列

   alter table tab_identity modify column id int;

原文链接:https://blog.csdn.net/TiAmo_xixi/article/details/125917725

栏目分类
最近更新