什么是约束?

在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中数据的合法性,有效性,完整性。

常见的约束有那些?

非空约束(not null):约束的字段不能为null
唯一约束(unique):约束的字段不能重复
主键约束(primary key):约束的字段既不能为null,也不能重复(简称 PK)。
外键约束(foreign key):(简称FK)。
检查约束(check):注意Oracle数据库有check约束,但是mysql没有, 目前mysql不支持该约束。

1:非空约束:not null

create table t_student(
id bigint,
name varchar(255) not null,
sex char(1) default 1,
classno varchar(255),
birth char(10)
);

2:唯一性约束(unique)

唯一约束修饰的字段具有唯一性,不能重复,但是可以为null。
案例:为某一列添加唯一性约束。

create table t_student(
no bigint unique,		//列级约束
name varchar(255) not null,
sex char(1) default 1,
classno varchar(255),
birth char(10)
);

案例2:给两个列或者多个列添加唯一性约束。
表示两个列联合起来是唯一的。

create table t_student(
no bigint,
name varchar(255) not null,
unique(no ,name)	//多个字段联合起来添加1个约束【表级约束】
sex char(1) default 1,
classno varchar(255),
birth char(10)
);

3:主键约束(primary key)

怎么给一张表添加主键约束?

create table t_student(
id bigint primary key,		//列级约束
name varchar(255) not null,
sex char(1) default 1,
classno varchar(255),
birth char(10)
);

主键特点:主键字段中的数据不能为null,也不能重复。

主键相关的术语?

主键约束:primary key
主键字段:id字段添加primary key之后,id叫做主键字段。
主键值:id字段中的每一个值都是主键值。

主键有什么用呢?

-表的设计三范式中有要求,第一范式就是要求任何一张表都应该有主键。
-主键的作用:主键值是这行记录在这张表当中的唯一标识。(就像一个人的身份证号码)

主键的分类?
-根据主键的字段数量来划分:

单一主键(常用)

复合主键
(多个字段联合起来添加一个主键)(复合主键不建议 使用,因为复合主键违背三范式。)
-根据主键性质来划分:

自然主键:
主键值最好就是一个和业务没有任何关系的自然数。(推荐使用)

业务主键:
主键值和系统的业务挂钩,例如:拿银行卡的卡号作为主键,拿着身份证号码作为主键。(不推荐使用)

注意:一张表的主键约束只能有一个。

使用表级约束定义主键:

create table t_student(
id bigint,		//表级约束
primary key(id)
name varchar(255) not null,
sex char(1) default 1,
classno varchar(255),
birth char(10)
);

mySql提供的主键值自增(auto_increment):

drop table if exists t_student1;
create table t_student(
id bigint primary key auto_increment,	//id字段自动维护一个自增的数字,从1开始,以1递增
name varchar(255) not null,
sex char(1) default 1,
classno varchar(255),
birth char(10)
);

提示:Oracle当中也提供了一个自增机制,叫做:序列(sequence)对象

4:外键约束(foreign key)

关于外键约束的相关术语:
外键约束:foreign key
外键字段:添加有外键约束的字段。
外键值:外键字段中的每一个值。

-语法:
foreign key(classno) references t_class(cno)

案例:学生表和班级表进行外键约束

drop table if exists t_student1;
drop table if exists t_class;
create table t_class(
	cno int primary key,
	cname varchar(255)
);

create table t_student1(
	id int primary key auto_increment,
	name varchar(255) not null,
	sex char(1) default 1,
	classno int,
	foreign key(classno) references t_class(cno),
	birth char(10)
);
insert into t_class
	(cno,cname)
values
	(101,'x'),
	(102,'y');
insert into t_student1
	(name,sex,classno,birth)
values
	('a','2',101,'1998-09-10'),
	('b','1',102,'1998-10-10'),
	('c','2',101,'1998-09-10');
select * from t_student1;
select * from t_class;

*外键值是否可以为null?

外键可以为null

*外键字段引用其他表的某个字段的时候,被引用的字段必须是主键吗?

被引用的字段不一定是主键,但至少具有unique约束。

每日一道Java面试题

记得关注我【Java有话说
在这里插入图片描述

Logo

更多推荐