MySQL基础--约束

Posted 张紫韩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL基础--约束相关的知识,希望对你有一定的参考价值。

 

    1. 约束的分类:

      not null:非空,用于保证该字段的值不

      能为空,比如姓名,学号

      default:默认,用于保证该字段的默

      认值 ,如性别

      primary key:主键,用于保证该字段具

      有唯一性,非空,如学号

      unique:唯一,用于该字段具有唯一性,

      可以为空

      check:检查约束(mysql不支持)

      foreign key:外键约束,用于限制两个表的关系,用于保证

    2. 添加约束的时机

        1.创建表时添加约束

        create table stuinfo(
        id int(5) primary key,
        stu_name varchar(5) not null,
        gender char(1)

             check(gender=\'男\' or gender=\'女\'),
        seat int(2) unique,
        gae int(2) default 18,
        major_id int(2),
        constraint fk_stuinfo_major foreign key(major_id) references major(id));

        2.修改表时添加约束

        alter table 表名 modify 列名 类型 约束类型

       

    3. 约束添加的分类

        1.列级约束

            六大约束都支持,但是外键约束无效果

        2.表级约束

            除了非空和默认,其他都支持

       

    4. 主键和唯一
      1、区别:
      ①、一个表至多有- -个主键,但可以有多个唯一
      ②、主键不允许为空,唯一-可以为空
      2、相同点
      都具有唯一-性
      都支持组合键,但不推荐

       

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

       

    6. 修改表时添加约束
      1、添加列级约束
      alter
      table 表名 modify column 字段名 字段类型 新约束;
      2、添加表级约束
      alter
      table 表名 add [ constraint 约束名] 约束类型 (字段名) [外键的引用] ;

    7. 列级约束

       create table stuinfo(
      id int(5) primary key,#主键约束
      stu_name varchar(5) not null,#非空约束
      gender char(1) check(gender=\'男\' or gender=\'女\'),#检查约束
      seat int(2) unique,#唯一约束
      age int(2) default 18,#默认约束
      major_id int(2) #外键约束

      major_id int(2) foreign key references major(id) #外键约束(不支持)

       

    8. 表级约束:

      create table stuinfo(
      id int(5),
      stu_name varchar(5),
      gender char(1) ,
      seat int(2),
      age int(2),
      major_id int(2),#外键约束
      primary key(id),#主键
      check(gender=\'男\' or gender=\'女\'),#检查
      unique(seat),#唯一

      constraint fk_stinfo_major

      foreign key(major_id)

      references major(id)#外键);

    9. 对于有外键的表:

      插入时我们先插入主表数据在差从表的数据

      删除时先删从表的数据在删主表的数据

      若有业务需求:我们需要直接删除主表的数据时,我们可以这样实现

      1. 级联删除:(使用关键字on delete cascade)

      alter table 从表名 add constraint 外键名 froeign key(添加外键的字段) refenences  主表名(字段名)

      on delete cascade;

      2.级联置空(使用关键字on delete set null):

      alter table 从表名 add constraint 外键名 froeign key(添加外键的字段) refenences  主表名(字段名)

      on delete set null;

    10. 常用命令
      •  通用写法: 

        create table stuinfo(
        id int(5) primary key,
        stu_name varchar(5) not null,
        gender char(1) check(gender=\'男\' or gender=\'女\'),
        seat int(2) unique,
        gae int(2) default 18,
        major_id int(2),
        constraint fk_stuinfo_major foreign key(major_id) references major(id));

         

      • 外键约束写入表级约束,其他约束写入列级约束

         

      • 查看表结构:desc 表名;

         

      • 查看索引:show index from 表名;

         

      • 索引包括;主键,外键,唯一

         

      • 添加表的非空约束:alter table stuinfo modify stu_name varchar(5) not null;

         

      • 添加表的默认约束:alter table stuinfo modify age  default 18;

         

      • 添加主键约束:alter table stuinfo modify id int(5) primary key;

        alter table stuinfo add constraint pk_stuinfo_major primary key(id);

         

      • 添加唯一约束:alter table stuinfo modify id int(5) unique;

        alter table stuinfo add unique(id);

         

      • 添加外键:alter table stuinfo add  foreign key(major_id) references major(id);

         

      • 删除非空约束和默认约束:alter table stuinfo

        modify 字段名 字段类型;

         

      • 删除主键约束:alter table stuinfo

        drop primary key;

        alter table stuinfo modify id int(2);

         

      • 删除唯一约束:

        alter table stuinfo drop index 唯一键名;   

         

      • 删除外键约束:alter table stuinfo 

        drop foreign key 外键名;

          

以上是关于MySQL基础--约束的主要内容,如果未能解决你的问题,请参考以下文章

MySQL基础--约束

MySQL基础五

python基础_mysql约束

Mysql 表约束(基础6)

MySQL基础

02 mysql 基础二 (进阶)