MySQL 约束

约束

主键约束:

关键字:PRIMARY KEY

特点:

  1. 主键约束相当于 唯一约束+非空约束 的组合,主键约束列不允许重复,也不允许出现空值

  2. 一个表最多只能有一个主键约束 ; 可以在列级别创建,也可以在表级别上创建

  3. 复合主键:主键约束对应着表中的一列或者多列

    • 这些列都不允许为空值
    • 组合的值不允许重复
  4. 创建主键约束时,系统默认会在所在的列或列组合上建立对应的主键索引

    如果删除主键约束了,主键约束对应的索引就自动删除

  5. 不要修改主键字段的值,可能会破坏数据的完整性

  6. MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用

注释:

单字段主键和多字段主键:

语法格式:

  1. 单字段主键:

    列名 列名数据类型 PRIMARY KEY[默认值]
    
  2. 复合主键:

    PRIMARY KEY (列名1,列名2,列名3,......,列名N)
    

删除主键约束:

语法格式:

ALTER TABLE table_name DROP PRIMARY KEY;

外键约束:

关键字:FOREIGN KEY

外键的作用:

  1. 外键属于引用完整性

  2. 一个表的外键可以为空值

    若不为空值,则每一个外键值必须等于另一个表中主键的某个值

特点:

  1. 从表的外键列,必须引用/参考主表的主键或唯一约束的列,因为被依赖/被参考的值必须是唯一的
  2. 在创建外键约束时,如果不给外键约束命名, 默认名不是列名,而是自动产生一个外键名,也可以指定外键
    约束名
  3. 删表时,先删从表(或先删除外键约束),再删除主表
  4. 当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数
    据,然后才可以删除主表的数据
  5. 在“从表”中指定外键约束,并且一个表可以建立多个外键约束
  6. 当创建外键约束时索引名,但是外键的约束名
  7. 删除外键约束后,必须手动删除对应的索引

注释:

语法格式:

  1. 建表时添加外键列

    [CONSTRAINT 外键名] FOREIGN KEY 字段名 REFERENCES 主表名 主键列 
    

    外键的命名:

    前缀一般为 fk 开头,紧跟 主表名 字段名;以下划线分割

  2. 建表后添加外键列

    ALTER TABLE table_name ADD FOREIGN KEY (字段名) REFERENCES 主表名 主键列;
    

注意:

  1. (从表的某个字段)的数据类型必须与主表名(被参考字段)的数据类型一致,逻辑意义也一样
  2. (从表的某个字段)的字段名可以与主表名(被参考字段)的字段名一样,也可以不一样

删除外键约束:

步骤一:

  • 查看约束名

    SELECT * FROM information_schema.table_constraints WHERE table_name = '表名称' ;
    
  • 删除外键约束

    ALTER TABLE 从表名 DROP FOREIGN KEY 外键约束名;
    

    步骤二:查看查看索引名和删除索引

  • 查看索引名

    SHOW INDEX FROM 表名称;
    
  • 删除索引

    ALTER TABLE 从表名 DROP INDEX 索引名;
    

自增约束:

关键字:AUTO_INCREMENT

特点:

  1. 一个表中只能有一个字段使用AUTO_INCREMENT ; 必须与主键组合使用

  2. AUTO_INCREMENT的列的数据类型必须是整数类型

  3. AUTO_INCREMENT 默认情况下,起始值为1,增量为1

  4. 如果自增列指定了 0 和 null,会在当前最大值的基础上自增

    如果自增列手动指定了具体值,直接赋值为具体值

注释:

语法格式:

  1. 建表时添加

    字段名 字段数据类型  AUTO_INCREMENT;
    
  2. 建表后添加

    ALTER TABLE table_name 字段名 数据类型 AUTO_INCREMENT;
    

删除自增长约束:

语法格式:

ALTER TABLE table_name 字段名 数据类型;

非空约束:

关键字:NOT NULL

特点:

  1. 非空约束指字段的值不能为空
  2. 非空约束只能出现在列上,不能组合非空,只能单独列;
  3. 空字符串 ’ ’ 不等于NULL, 0也不等于NULL

注释:

语法格式:

  1. 创建表时添加非空约束

    字段名 字段数据类型 NOT NULL
    
  2. 建表后添加非空约束

    ALTER TABLE table_name MODIFY 字段名 数据类型 NOT NULL;
    
  3. 删除非空约束

    ALTER TABLE table_name MODIFY 字段名 数据类型 NULL;
    

默认约束:

特点:

  1. 默认约束指定某列的默认值
  2. 默认值只能约束一个列
  3. 不能用于AUTO_INCREMENT列,TIMESTAMP列
  4. 对一个已经有数据的表添加默认约束,原来的数据不能得到默认值

注释:

语法格式:

  1. 建表时添加默认约束

    字段名 字段数据类型 DEFAULT 默认值;
    
  2. 建表后添加默认约束

    ALTER TABLE table_name MODIFY 字段名 数据类型 DEFAULT 默认值;
    

删除默认约束:

  1. 删除默认约束,并删除非空约束

    ALTER TABLE table_name MODIFY 字段名 数据类型;
    
  2. 删除默认约束,保留非空约束

    ALTER TABLE table_name MODIFY 字段名 数据类型 NOT NULL;
    

唯一约束:

特点:

  1. 唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一
  2. 唯一性约束允许列值为空 ; 允许为空,但是只能出现一个空值
  3. 在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同
  4. MySQL会给唯一约束的列上默认创建一个唯一索引

注释:

语法格式:

  1. 创建表时添加

    字段名 字段类型 UNIQUE
    
  2. 创建表时最后添加

    CREATE TABLE table_name(
        .....
        [CONSTRAINT 约束名] UNIQUE KEY (字段名)
    )
    
  3. 建表后添加

    • 方式一:

      复合型约束

      ALTER TABLE table_name ADD UNIQUE KEY(字段列表);
      
    • 方式二:

      ALTER TABLE table_name MODIFY 字段名 数据类型 UNIQUE;
      

删除唯一性约束:

特点:

  1. 删除唯一约束只能通过删除唯一索引的方式删除
  2. 删除时需要指定唯一索引名,唯一索引名就和唯一约束名一样
  3. 如果创建唯一约束时未指定名称
    • 如果是单列,就默认和列名相同
    • 如果是组合列,那么默认和() 中排在第一个的列名相同
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值