solitaryclown

SQL约束

2022-01-06
solitaryclown

1. 约束

1.1. 概念

约束是对表中数据的限制条件。

1.2. 分类

1.2.1. 主键

主键约束=唯一+非空

  • 关键字:primary key
  • 性质
    1. 一张表最多1个主键
    2. 多个列可以联合作为主键
    3. 数据库会在主键字段(包括组合列)上创建唯一索引。
  • 操作
      -- 创建时加约束
      CREATE table if not EXISTS table_name(
          id INT comment 'ID' PRIMARY KEY,
          name VARCHAR(20) comment '姓名',
          gender VARCHAR(1) comment '性别'
      );
    
      -- 创建时加约束,[constraint CONSTRAINT_name]可以省略,会默认给一个主键名称
      CREATE table if not EXISTS table_name(
          id INT comment 'ID',
          name VARCHAR(20) comment '姓名',
          gender VARCHAR(1) comment '性别',
          CONSTRAINT CONSTRAINT_name PRIMARY KEY(id)
      );
    
      -- 联合主键约束,即对多个列的组合创建主键约束,只能用上面的第二种方法创建。
      CREATE table if not EXISTS table_name(
          id INT comment 'ID',
          name VARCHAR(20) comment '姓名',
          gender VARCHAR(1) comment '性别',
          PRIMARY KEY(id,name)
      );
    
      -- 创建后添加
      alter table table_name add CONSTRAINT pk_name PRIMARY KEY(id);
      alter table table_name add PRIMARY KEY(id);
    
      -- 删除主键约束
      alter table table_name drop PRIMARY KEY;
    
  • 作用
    唯一标识某条记录,即某个对某个列或某几个列添加主键约束,那么表中的所有记录在这个列/几个列上的值都是唯一的。

1.2.2. 自增长

  • 关键字:auto_increment
  • 作用:插入时如果设置为null,则数据库会自动填入一个自增的值,默认从1开始,步长为1。
  • 性质:
    1. 只能作用于主键
    2. 数据库填入的自增值是上一条插入的记录的值+1。如果某次插入记录时在自增列上使用自定义的值,假设是n,那么下次数据库产生的自增值是n+1。
    3. 数据类型必须是整数型
    4. 自增值的上限是自增列数据类型的范围上限,比如int型,当自增值达到2^31-1,再进行记录插入,自增值仍然是2^31-1。
  • 设置自增长、设置初始值、删除自增长
      -- 设置初始值
      CREATE table if not EXISTS table_name(
          id INT comment 'ID' PRIMARY KEY auto_increment,
          name VARCHAR(20) comment '姓名',
          gender VARCHAR(1) comment '性别'
      )auto_increment=20210101;
    
      -- 修改初始值
      alter table table_name  auto_increment=20220101;
      -- 删除auto_increment
      #删除auto_increment不能像主键约束一样使用drop,可以通过change修改字段来消除auto_increment
      alter table table_name CHANGE id id int ;
    

    1.2.3. 非空

  • 关键字:not null
  • 作用:作用的字段不能为null
  • 操作:

      -- 创建时添加
    
      CREATE table if not EXISTS table_name(
          id INT comment 'ID' PRIMARY KEY auto_increment,
          name VARCHAR(20) not null comment '姓名',
          gender VARCHAR(1) not null comment '性别'
      )
    
      -- 创建后添加
      alter table table_name modify gender VARCHAR(1) not null;
    
      -- 删除not null
      alter table table_name modify gender VARCHAR(1);
    

    1.2.4. 唯一性

  • 关键字:unique
  • 作用:保证字段数据的唯一性
  • 性质:
    1. 允许多个null,null和任何值都不相等
    2. UNIQUE和Primary Key一样,也是一种key。
  • 操作:
      -- unique约束
      -- 创建时添加
      CREATE table if not EXISTS table_name(
          id INT comment 'ID' PRIMARY KEY auto_increment,
          name VARCHAR(20) not null comment '姓名',
          gender VARCHAR(1) not null comment '性别',
          phone char(11) UNIQUE
      )
    
      -- 创建后添加
      alter table table_name add CONSTRAINT uq_name UNIQUE(phone);
      alter table table_name add  UNIQUE(phone);
      -- 删除unique
      ALTER TABLE table_name drop INDEX uq_name ;
      ALTER TABLE table_name drop KEY uq_name ;
    

    1.2.5. 默认

  • 关键字:default
  • 作用:如果记录插入时字段未指定值,则自动填入该字段的默认值。如果插入null,则填入Null而不会填入默认值。
  • 操作
      -- 创建时指定
      CREATE table if not EXISTS table_name(
          id INT comment 'ID' ,
          name VARCHAR(20)  comment '姓名',
          gender VARCHAR(1)  comment '性别' DEFAULT '男',
          phone char(11) 
      )
    
      -- 创建后指定
      alter table table_name modify gender VARCHAR(1) DEFAULT '女';
      alter table table_name CHANGE gender gender  VARCHAR(1) DEFAULT '女';
      -- 删除默认值
      alter table table_name modify gender VARCHAR(1) DEFAULT NULL;
      -- 删除默认值
      alter table table_name modify gender VARCHAR(1);
    

    1.2.6. 零填充

    1.2.7. 外键


上一篇 MySQL运算符

下一篇 SQL查询

Comments

Content