Mysql基础(四)——约束与表关系
一、约束条件分类
1、非空约束:保证字段的值不能为空:
team_name VARCHAR(20) NOT NULL;
2、默认约束:保证字段即使字段不插入数据,也会有一个默认值:
team_name VARCHAR(20) DEFAULT '无名队';
3、主键约束:保证数据不为空,且唯一:
id INT PRIMARY KEY AUTO_INCREMENT;
PRIMARY KEY:主键
AUTO_INCREMENT:因为主键的缘故,所以id不能重复。但有时候会忘记哪些id的序号排到哪里了,所以,我们设置自增。(在最后的id序号值,+1)
项目开发中,一般来说,每一张表都会设置一个id,并且设置为主键。
4、外键约束:限制两张表之间的关系,一张表的外键必须是另一张表的主键,可以为空:
FOREIGN KEY (team_id) REFERENCES teams(id);
在创建表时,在括号里面另起一行写代码。
students表中,有team_id字段,这个【team_id】字段,对应teams表当中的【id】字段。
让team_id,关联到id。
二、表关系分类:
1、一对多关系:小组对学生。
如,一个小组对应多个学生,一个学生只能在一个小组。
2、多对多关系:学生对老师。
一个学生选择多个老师的课程,一个老师教多个学生。
(1)学生表:
create table students(
id int,
student_name varchar(20),
sex char(1),
age int,
achievement double(5,2),
team_id int,
graduation_date date
);
(2)老师表:
create table teachers(
id INT PRIMARY KEY AUTO_INCREMENT,
teacher_name VARCHAR(20)
);
(3)老师对学生表:
create table teacher_to_student(
id int primary key auto_increment,
teacher_id int,
student_id int,
foreign key(teacher_id) references teachers(id),
foreign key(student_id) references students(id)
);
(4)插入数据:
insert into teacher_to_student(teacher_id,student_id) values(1,2);
3、一对一关系:
并不常见,因为大部分的一对一关系,其实可以放在同一张表中存储。
可能情况:隔离表的部分数据,为了隐藏;或者是作为临时数据,定期清空。