数据库约束

147 阅读2分钟

数据库约束

这里的所有约束是针对于该列的,对于其他列没有影响!

约束类型

  • NOT NULL - 指示某列不能存储 NULL 值。

  • UNIQUE - 保证某列的每行必须有唯一的值。

  • DEFAULT - 规定没有给列赋值时的默认值。

  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

  • CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略 CHECK子句。

not null

  • 设置为 not null 的列不允许为空,否则报错
  • 可以给任意列设置
create table student(
  id int not null,
  name varchar(20)
);

报错信息

Column 'XX' cannot be null

unique

  • 数据唯一,如果尝试插入会报错!
create table student(
  id int unique,
  name varchar(20)
);

报错信息

-- 重复的条目
Duplicate entry 'XX' for key 'XX'

default

  • 指定插入数据时,name列为空,默认值unkown
create table student(
  id int,
  name varchar(20) default '匿名'
);

primary key

  • 唯一的生成标识(unique 和 not null 的结合)

  • 不能为空,不能重复

create table student (
  id int primary key,
  name varchar(20)
);

报错信息

-- 不能为空
Column 'id' cannot be null
-- 不能重复
Duplicate entry '1' for key 'PRIMARY'

auto_increment

  • 设置自增主键
  • 可以设置为null
create table student(
  id int primary key auto_increment,
  name varchar(20)
  );

外键约束

  • 描述的是两张表之间的“依赖关系”。
  • 下列例子中子表是student,父表是class
  • 子表依赖于父表,外简约束表示存在一个值,且这个值需要在父表中存在!
  • 修改或者删除父表的被关联字段值前提是没有被子表依赖。

外键的运行原理

create table class(
  classId int primary key auto_increment,
  name varchar(50)
);
insert into class values(1,'java101');
insert into class values(2,'java102');
insert into class values(3,'java103');
insert into class values(4,'java104');
create table student( studentId)

create table student(
  id int primary key auto_increment,
  name varchar(20),
  classId int(10) ,
  foreign key(classId) references class(classId)
);
insert into student values(null,'nick',1);