mysql中的约束

Posted Learning notes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql中的约束相关的知识,希望对你有一定的参考价值。

mysql中的约束类型

约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。

MYSQL中,常用的几种约束:

 

  • primary key 主键

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

  每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。

  当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

  

-- 基本使用
create table user( 
    id int primary key,
    name varchar(20)
);


-- 删除主键约束
alter table user drop primary key;

-- 添加主键约束
alter table user add primary key(id,name);

-- 修改主键约束
alter  table user modify id int primary key;

 

  • foreign key外键

  外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系

-- 基本使用

-- 主表
create table type(
    id int primary key,
    type varchar(20)
);

-- 副表
create table tag(
    id int primary key,
    name varchar(20),
    type_id int,
    foreign key (type_id) references type(id)
);

-- 多列外键组合,必须用表级别约束语法
-- 主表
create table classes(
  id int,
  name varchar(20),
  number int,
  primary key(name,number)
);

-- 副表
create table student(
  id int auto_increment primary key,
  name varchar(20),
  classes_name varchar(20),
  classes_number int,
  /*表级别联合外键*/
  foreign key(classes_name, classes_number) references classes(name, number) 
);


-- 删除外键约束
alter table student drop foreign key student_id;


-- 增加外键约束
alter table student add foreign key(classes_name, classes_number) references classes(name, number);
  • unique唯一

  唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。

  唯一约束不允许出现重复的值,但是可以为多个null。

  同一个表可以有多个唯一约束,多个列组合的约束。

  在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同。

  唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。

-- 创建表时设置,表示用户名、密码不能重复
    create table user(
        id int not null ,
        name varchar(20),
        password varchar(10),
        unique(name,password)
    );


-- 添加唯一约束
alter table user add unique (name, password);


-- 修改唯一约束
alter table user modify name varchar(25) unique;

-- 删除约束
alter table user drop index name;
  • not null非空

  非空约束 not null  与  默认值 default

  非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。

  Null类型特征:

  所有的类型的值都可以是null,包括int、float 等数据类型

-- 创建table表,ID 为非空约束,name 为非空约束 且默认值为abc
create table user(
           id int not null,
           name varchar(255) not null default  abc,
           sex char null
);


-- 增加非空约束
alter table user
modify sex varchar(2) not null;

-- 取消非空约束
alter table user modify sex varchar(2) null;

-- 取消非空约束,增加默认值
alter table user modify sex varchar(2) default abc null;

 

  • auto_increment自增

create table user(
      id int auto_increment primary key,
      name varchar(255) not null ,
      sex char null
);
  • default默认值

create table user(
      id int auto_increment primary key,
      name varchar(255) not null ,
      sex varchar(2) default 
);

 

以上是关于mysql中的约束的主要内容,如果未能解决你的问题,请参考以下文章

尝试向 MySQL 中的 table.column 添加唯一约束时出现重复条目​​错误

活动中 TabLayout 内的片段的约束问题

如何将约束添加到 MYSQL 中的列仅以保存已存在于同一表的另一列中的值? [复制]

MYSQL创建表、约束、外键

mysql数据库 check约束无效

mysql中的约束