数据库约束
这里的所有约束是针对于该列的,对于其他列没有影响!
约束类型
-
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);