【数据库】字段约束

  约束是在表上强制执行的数据校验规则,约束主要用于保证数据库里数据的完整性,常见的约束有:

  • NOT NULL:非空约束,指定某列的取值不能为空
  • UNIQUE:唯一约束,指定某列或某几列组合不能重复
  • PRIMARY KEY:主键约束,指定该列的值可以唯一地标识该条记录
  • FOREIGN KEY:外键约束,指定该行记录从属与主表中的一条记录,主要用于保证参照的完整性
  • CHECK:检查约束,指定一个布尔表达式,用于指定对应列的值必须满足该表达式

1 PRIMARY KEY约束

  主键约束在每张数据表中只有一个,但是一个主键约束可以由1到多个列组成,由多个列组成的主键约束也成为联合主键。设置了主键约束就是为了确保该列数据值的唯一性,主键约束的关键字是PRIMARY KEY,因此在设置主键约束时也经常把主键约束的名字以PK开头。主键约束相当于非空约束和唯一约束,主键列的值用来唯一地标识一条记录,MySQL所有主键使用同样的约束名——PRIMARY,当创建主键约束时,MySQL在主键约束列上建立对应的唯一索引

  • 在创建表时设置单一列的主键约束的语法:
create table table_name(
    ...
    # 列级主键约束
    column_name data_type PRIMARY KEY ,
    ...
    # 表级主键约束
    PRIMARY KEY (column_name)
);
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 在创建表时设置多列的主键约束的语法:
create table 表名(
    ...
    # 只能使用表级语法
    PRIMARY KEY(column_name,...)
);
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 在修改表时添加单一列的主键约束:
alter table table_name add PRIMARIY KEY (column_name);
  
  
  • 1
  • 在修改表时设置多列的主键约束的语法:
alter table table_name add PRIMARIY KEY(column_name,...);
  
  
  • 1
  • 设置整型主键列自增语法:
create table 表名(
    ...
    columnName int AUTO_INCREMENT PRIMARY KEY
);
  
  
  • 1
  • 2
  • 3
  • 4
  • 取消主键约束语法:
alter table table_name drop PRIMARY KEY;
  
  
  • 1
  • 注意:取消主键时,如果是主键自增的需要先取消自增属性,再取消主键

2 UNIQUE约束

  唯一约束用于保证指定列或指定列组合不允许出现重复值,需要注意的是,可以出现null值,当为某列创建唯一约束时,MySQL会为该列相应地创建唯一索引,如果不给唯一约束起名,该唯一约束默认与列名相同。

  • 在创建表时设置单一列的唯一约束的语法:
create table table_name(
    ...
    # 列级主键约束
    column_name data_type UNIQUE,
    ...
    # 表级主键约束
    [constraint constraint_name] UNIQUE (column_name)
);
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 在创建表时设置多列组合的唯一约束的语法:
create table 表名(
    ...
    # 只能使用表级语法
    [constraint constraint_name] UNIQUE (column_name,...)
);
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 在修改表时添加单一列的唯一约束:
alter table table_name add [constraint constraint_name] UNIQUE (column_name);
  
  
  • 1
  • 在修改表时设置多列组合的唯一约束的语法:
alter table table_name add [constraint constraint_name] UNIQUE (column_name,...);
  
  
  • 1
  • 取消唯一约束语法:
alter table table_name drop index constraint_name;
  
  
  • 1

3 FOREIGN KEY约束

  外键约束主要用于保证一个或两个数据表之间的参照完整性,外键时构建于一个表的两个字段或者两个表的两个字段之间的参照关系,建立外键约束的时候,MySQL也会为其建立索引

  • 建立外键约束:
create table 表名(
    # MySQL中无法生效
    column_name data_type REFERENCES table_name(column_name),
    # 表级语法
    FOREIGN KEY(column_name,...) REFERENCES table_name(column_name,...),
    # 表级语法,加约束名
    CONSTRAINT constrain_name FOREIGN KEY(column_name) REFERENCES table_name(column_name)
);
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 增加外键约束:
alter table table_name add [CONSTRAINT constrain_name] FOREIGN KEY(column_name,...) REFERENCES table_name(column_name,...);
  
  
  • 1
  • 删除外键约束
alter table 表名 drop FOREIGN KEY 约束名;
  
  
  • 1

4 NOT NULL约束

  非空约束用于确保指定列不允许为空,非空约束只能作为列级约束使用,只能使用列级约束语法定义,在SQL中null是不分大小写的,且具有如下特征:

  • 所有数据类型的值都可以是null
  • 空字符串不等于null,0也不等于null


  • 建表时指定非空约束的语法:

  • create table 表名(
        ...
        column_name data_type [default value] NOT NULL
    );
      
      
    • 1
    • 2
    • 3
    • 4
    • 建表后添加或删除非空约束语法:
    # 添加非空约束
    alter table 表名 modify column_name data_type NOT NULL;
    # 取消非空约束
    alter table 表名 modify column_name data_type NULL;
      
      
    • 1
    • 2
    • 3
    • 4

    5 CHECK约束

      CHECK约束用来检查字段值所允许的范围,以此来保证域的完整性,建立CHECK约束的语法格式:

    create table 表名(
        ...
        CHECK(逻辑表达式)
    );
      
      
    • 1
    • 2
    • 3
    • 4

    猜你喜欢

    转载自blog.csdn.net/yimenglin/article/details/92794704