• MySQL数据库的七种约束语法格式和使用详解&约束的总结


    💨更多相关知识👇

    💖异常处理与解决方案详解上篇

    💖异常处理与解决方案详解下篇

    💖Math类与System类的常用方法使用

    💖JavaEE中的静态方法定义、方法重载要求、return作用详解

    💖List接口的常用方法,精华总结

    💖JavaEE里面的所有内部类详细介绍与使用

    💖ArrayList集合中的常用成员方法

    💖JavaEE中的Stream流的常用方法

    💖JavaEE中的Stream流知识点使用,精华总结,一文直接上手


    🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈
     
    🍂个人博客首页: KJ.JK
     
    欢迎大家点赞👍收藏💖评论💬关注🔒
     
    💖源码获取 | 💻学习交流 | 🤝商务合作 | 💨私信作者


    一、 MySQL约束


    1、概念

                约束英文: "constraint"
    
                "约束实际上就是表中数据的限制条件"
    
    • 1
    • 2
    • 3

    2、作用

                 * 表在设计的时候加入约束的目的就是为了保证表中的记录完整性和有效性,
                   比如用户表有些列的值(手机号)不能为空,有些列的值(身份证号)不能重复
    
    • 1
    • 2

    3、分类

                      * 主键约束(primary key) PK
                      
                      * 自增长约束(auto_increment)
                      
                      * 非空约束(not null)
                      
                      * 唯一性约束(unique)
                      
                      * 默认约束(default)
                      
                      * 零填充约束(zerofill)
                      
                      * 外键约束(foreign key) FK
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    二、MySQL约束—主键约束


    1、概念

            * MySQL主键约束是一个列或者多个列的组合,"其值能唯一地标识表中的每一行,方便在RDBMS中尽快的找到某一行"
    
            * 主键约束相当于 "唯一约束 + 非空约束" 的组合,主键约束列"不允许重复",也"不允许出现空值"* 每个表最多"只允许一个主键"
    
            * 主键约束的关键字是:"primary key"
    
            * 当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引
                
            * 主键的作用: 主键约束的列非空且唯一
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2、操作—添加单列主键

       "创建单列主键有两种方式":
    
               方式1: "一种是在定义字段的同时指定主键"   (在创建表的时候,直接在字段之后,跟"primary key关键字")
               
               方式2: "一种是定义完字段之后指定主键"     (在创建表的时候,在所有的字段之后,使用"primary key关键字")
    
    • 1
    • 2
    • 3
    • 4
    • 5

    🍂方式1:在定义字段的同时指定主键

          * 语法格式:              
                  create table 表名(
                    ...
                   <字段名> <数据类型> primary key 
                    ...
                  );
                      
                      
           * 范例:  
                create table emp1(
                   eid int primary key,   -- 添加主键的方式1
                   name varchar(20),
                   deptid int,
                   salary double
                  );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    请添加图片描述


    🍂 方式2:在定义字段之后再指定主键

       * 语法格式:
                  create table 表名(
                      ...
                  [constraint <约束名>] primary key [字段名]
                 );
    
    
       * 范例:
                 create table emp2(
                     eid int, 
                     name varchar(20),
                     deptid int,
                     salary double,
                     constraint pk1 primary key(eid)   
                      -- 添加主键的方式2
                      -- constraint pk1 可以不写,pk1为主键的约束名
                      -- constraint 可以给主键写名字
                  );
                 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    请添加图片描述


    3、操作—添加多列主键(联合主键)

           * 所谓的联合主键,就是这个主键是由"一张表中多个字段组成的"
    
    "注意":
           1. "当主键是由多个字段组成时""不能直接在字段名后面声明主键约束"
       
           2. 一张表只能有一个主键,"联合主键也是一个主键"
               
    ------------------------------------------------------------------------------------------------------------
               
         * 语法格式:
                    create table 表名(
                             ...
                     primary key (字段1,字段2,…,字段n)
                   );
    
    
         * 范例:
                     create table emp3(
                       name varchar(20),
                       deptid int,
                       salary double,
                       constraint pk2 primary key(name,deptid)    -- 联合主键
                     );
    
    
    
    /*
                    -- 联合主键,也只能一个主键,只是联合在一起作为一个主键
                    -- 联合主键的话,那两个联合在一起的只要不是完全相同,就可以插进去
               insert into emp3 values('张三',10,5000); 
               insert into emp3 values('张三',20,5000);
    
                    -- 联合主键的各列,每一列都不能为空
               insert into emp3 values(null,20,5000);  -- 不行
               insert into emp3 values('张三',null,5000);   -- 不行
    
    */
               
    
    • 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
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    请添加图片描述


    请添加图片描述


    请添加图片描述


    4、通过修改表结构添加主键(追加主键)

               "主键约束不仅可以在创建表的同时创建,也可以在修改表时添加"
               
    -----------------------------------------------------------------------------------------------------------
               
            * 语法格式:
    
                    alter table <表名> add primary key(字段列表);
    
            * 范例:
                    alter table emp4 add primary key(eid);  -- 追加单列主键
                        
                    alter table emp5 add primary key(name,deptid);  -- 追加多列主键
          
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    请添加图片描述


    请添加图片描述


    5、更新主键和删除主键


    🌿更新主键

                      * 不能更新,主键必须先删除,才能更新
    
    • 1

    🌿删除主键

                
                "一个表中不需要主键约束时,就需要从表中将其删除"             
    ------------------------------------------------------------------------------------------------------------             
           * 格式:
                 alter table <数据表名> drop primary key;
    
           * 范例:  
                 alter table emp1 drop primary key;   -- 删除单个主键与多个主键都是一样的,因为只有一个主键而已
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    🔥系列热门专栏🔥:
     
    《JavaEE进阶序列 | 从小白到工程师》系列文章
     
    《JavaEE项目实战》系列文章
     
    《JavaSwing项目合集》系列文章
     
    《数据分析中的pandas》系列文章


    三、MySQL约束—自增长约束(auto_increment)


    1、概念

          * 在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,
            而由数据库系统根据定义"自动赋值"。每增加一条记录,主键会自动以相同的步长进行增长。
    
          *通 过给字段添加 "auto_increment" 属性来实现主键自增长
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、自增长的语法格式

                * 语法: 字段名 数据类型 auto_increment
                    
                * 范例:
                        create table t_user1(
                          id int primary key auto_increment,  -- 主键自增长约束
                          name varchar(20)
                        );
    
    //任何一个字段要做自增长必须前提是本身是一个索引(key一栏有值),也就是主键
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    请添加图片描述


    3、自增长的注意事项

         * "默认情况下,auto_increment的初始值是 1", 每新增一条记录,字段值自动加 1
         
         * 一个表中"只能有一个字段使用 auto_increment约束",且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)
         
         * auto_increment约束的字段必须具备 NOT NULL 属性
         
         * auto_increment约束的字段"只能是整数类型"(TINYINT、SMALLINT、INT、BIGINT)* auto_increment约束字段的最大值受该字段的数据类型约束,如果达到上限,auto_increment就会失效
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4、指定自增字段初始值

               * 如果第一条记录设置了该字段的初始值,那么新增加的记录就从这个初始值开始自增
                   
               * 例如,如果表中插入的第一条记录的 id 值设置为 5,那么再插入记录时,id 值就会从 5 开始往上增加
    
    • 1
    • 2
    • 3

    🍂 方式1:创建表时指定

            * 范例:  
                    create table t_user2(
                       id int primary key auto_increment,         //创建时指定自增长
                       name varchar(20)
                    )auto_increment=100;
    
               insert into  t_user2 values(null,'张三');   -- id 初始为100
    
                insert into  t_user2 values(null,'张三');    -- id 自增为101
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    请添加图片描述


    🍂方式2:创建表之后追加

              *范例:    
                        create table t_user3(
                          id int primary key auto_increment,
                          name varchar(20)
                         );
    
    
            alter table t_user3 auto_increment=200;            //追加自增长值
    
            insert into  t_user3 values(null,'张三');  -- id 初始为200
    
            insert into  t_user3 values(null,'张三');    -- id 自增为201
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    请添加图片描述


    5、 修改自增长

                  "自增长如果是涉及到字段的改变,必须先删除自增长,后增加"
    
    ----------------------------------------------------------------------------------------------------------
       * 修改当前自增长已经存在的值:
                        alter table 表名 auto_increment =;   //修改只能比当前已有的自增长的最大值大,不能小(小不生效)
    
       * 修改每次自增长增加多少 :
                        set auto_increment_increment=数字          
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6、删除自增长

                * 语法:    alter table 表名 modify 字段 类型;
    
    • 1

    7、delete和truncate在删除后自增列的变化


    🌿delete的变化

           -- delete 删除数据之后,自增长还是在最后一个值基础上加1
           -- 有起始值也一样从你上次断开的时候开始
    
    • 1
    • 2

    请添加图片描述


    🌿truncate的变化

               --truncate数据之后自动增长从默认起始值开始
    
    • 1

    请添加图片描述


    四、MySQL约束—非空约束(not null)


    1、概念

          * MySQL 非空约束(not null)指字段的值不能为空
            对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错
    
    • 1
    • 2

    2、非空约束的语法格式


    🍂方式1:创建表时指定

                  * 语法: <字段名><数据类型> not null; 
     
                  * 范例:
                        create table t_user6(
                               id int,
                               name varchar(20) not null,  -- 指定非空约束
                               address varchar(20) not null  -- 指定非空约束
                      );                 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    请添加图片描述


    🍂方式2:创建表之后追加

                 * 语法: alter table 表名 modify 字段 类型 not null;
    
                 * 范例:
                         alter table t_user7 modify name varchar(20) not null;
    
    • 1
    • 2
    • 3
    • 4

    请添加图片描述


    3、删除非空约束

                  * 语法: alter table 表名 modify 字段 类型
                      
                  * 范例: alter table t_user7 modify name varchar(20);    
    
    • 1
    • 2
    • 3

    请添加图片描述


    五、MySQL约束—唯一约束(unique)


    1、概念

                * 唯一约束(Unique Key)是指"所有记录中字段的值不能重复出现"
                  例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况
    
    • 1
    • 2

    2、唯一约束的语法格式


    🍂方式1:创建表时指定

                   * 语法:  <字段名> <数据类型> unique
                   * 范例:
                            create table t_user8(
                               id int,
                               name varchar(20),
                               phone_number varchar(20) unique
                           );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    请添加图片描述


    🍂方式2:创建表之后追加

              * 语法 :  alter table 表名 add constraint <约束名> unique();
              
              * 范例 :  alter table t_user9 add constraint unique_pn unique(phone_number);
    
    //约束名可写可不写,不写会默认生成
    //追加唯一约束的时候,要满足原表里面没有重复的数据,要不然会添加失败
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    请添加图片描述


    3、删除唯一约束

                 * 语法: alter table <表名> drop index <唯一约束名>;
    
                 * 范例: alter table t_user9 drop index unique_pn;
              
    // UNIQUE约束名默认是字段名          
    
    • 1
    • 2
    • 3
    • 4
    • 5

    请添加图片描述


    4、唯一约束的注意事项

                * 在mysql中null和任何值都不相同,也和自己不同,所以下面的null可以插入不受unique的影响
                    
                * 解决方法:配合 not null 一起使用
    
    • 1
    • 2
    • 3

    请添加图片描述


    六、MySQL约束—默认约束(default)


    1、概念

                   * MySQL 默认值约束用来指定某列的默认值
    
    • 1

    2、默认约束的语法格式


    🍂方式1:创建表时指定

                 * 语法 :  <字段名> <数据类型> default <默认值>;
                 
                 * 范例 :  
                           create table t_user10(
                             id int,
                             name varchar(20),
                             address varchar(20) default '北京'  -- 指定默认约束
                            );
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    请添加图片描述


    🍂方式2:创建表之后追加

                  * 语法: alter table 表名 modify 列名 类型 default 默认值; 
                        
                  * 范例: alter table t_user11 modify address varchar(20) default '深圳';
    
    • 1
    • 2
    • 3

    请添加图片描述


    3、删除默认约束

                     * 语法: alter table <表名> modify column <字段名> <类型> default null;   //column可写可不写
    
                     * 范例: alter table t_user11 modify address varchar(20) default null;
    
    • 1
    • 2
    • 3

    请添加图片描述


    七、MySQL约束—零填充约束(zerofill)


    1、概念

          *  插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0
      
          *  zerofill默认为int(10)
      
          *  当使用zerofill 时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍,
             例如,有符号为-128~+127,无符号为0~256
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2、零填充约束的格式

                 * 语法 :   <字段名> <数据类型> zerofill;
    
                 * 范例 :  
                           create table t_user12(
                             id int zerofill,  -- 默认填充10位
                             name varchar(20)
                            );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    请添加图片描述


    3、删除零填充约束

                 * 语法 : alter table <表名> modify <字段名> <类型> ; 
                 
                 * 范例 : alter table t_user12 modify id int;     
    
    • 1
    • 2
    • 3

    请添加图片描述


    八、MySQL约束的总结

      "主键约束:"
     
                  * 关键字: primary key
                      
                  * 特点:  
                          1.一个表只有一个主键(包含联合主键)
                          2.添加了主键约束的列不能为空,并且值不能重复
                          3.主键可以唯一的标识表中的一行数据,目的是提高查询的效率
                         
    ------------------------------------------------------------------------------------------------------------
    
      "自增长约束:"
                
                  * 关键字: auto_increment
                             
                  * 特点:  
                           1.自增长约束和主键一起使用
                               
                           2.自增长约束默认是从1开始增长的
    
                           3.每次添加数据,自增长的值加1
                               
          * delete和truncate自增长的特点:
                              
                           1.delete删除数据后,自增长的值会被保留,从上一个断点继续增长
                               
                           2.truncate是将表删除,重新创建新表,所以清空数据后,自增长是从1开始
                               
    ------------------------------------------------------------------------------------------------------------
                               
       "非空约束:"
                               
                  * 关键字: not null
                             
                  * 特点:     
                        
                           1.添加非空约束的列不能为空
                            
                           2.真正的空是NULL,不是‘NULL’,也不是 ''
                               
    ------------------------------------------------------------------------------------------------------------                       
         "唯一约束:"
                               
                  * 关键字: unique
                             
                  * 特点:          
    
                           1.添加唯一约束之后,该列的值不能重复
                               
                           2.虽然不能重复,但是添加唯一约束的列可以为NULL,因为NULL不等于NULL
    
    ------------------------------------------------------------------------------------------------------------
              
         "默认约束:"
                                
                  * 关键字: default
                             
                  * 特点:   
                          1.添加约束的列如果没有指定值,则为默认值
                               
    ------------------------------------------------------------------------------------------------------------
                              
         "零填充约束:"
                              
                  * 关键字: zerofill
                             
                  * 特点:   
    
                           1.当给数值类型设置该约束,则左边不够指定的整形长度时,则自动补充0
                               
                           2.默认零填充约束的数字int(10)
                               
                           3.指定零填充约束的列为unsigned类型,即无符号类型
    
    • 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
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    作者:KJ.JK

    文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

  • 相关阅读:
    AIGC——ComfyUI 安装与基础使用
    【LeetCode】640. 求解方程
    分享Java并发:线程间的通信
    SpringMVC访问路径设置
    确定编写代码的规则——变量命名规则和编写规范
    QQ机器人-nonebot
    单片机练习题3
    ⑩⑦【MySQL】锁:全局锁、表级锁、行级锁
    详解 Spark 核心编程之累加器
    城市燃气价格体系及计量、计费
  • 原文地址:https://blog.csdn.net/m0_47384542/article/details/126043974