ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL基础--约束

2021-05-15 14:03:28  阅读:192  来源: 互联网

标签:major -- 约束 int stuinfo MySQL table id


 

    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 外键名;

          

标签:major,--,约束,int,stuinfo,MySQL,table,id
来源: https://www.cnblogs.com/zzhAylm/p/14771352.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有