MySQL从入门到跑路_03 (实例实操__外键约束)
为什么要用外键约束?
因为在一些数据库当中,会有很多重复数据。这些重复数据会使数据库的内存浪费掉。比如在一个学校的学生名单表中。一个班有100个学生,每一个学生后面多半都会有一个字段叫班级。就会有100多个重复的语句。如果把班级设置为一个外键,那么在插入班级的时候,使用一个简短的代码当做键。查询的时候通过键和表连接。就可以查询到班级信息。
使用外键的好处是:避免数据冗余,空间浪费。
父表:被引用的表
子表:引用的表
-
Demo
-
如果要创建的话,先创建父表,后创建子表
-
重点在
foreign key(cno) references demo_class(classno)
-
foreign key(字段名) references 父表(父表字段)
-
#先创建父表 create table demo_class( classno int primary key, classname varchar(255) ); #再创建子表 create table demo_student( no int primary key auto_increment, name varchar(255), cno int, foreign key(cno) references demo_class(classno) );
-
-
创建好了之后,就可以插入数据
-
插入数据的顺序也有要求
- 先插入父表
- 再插入子表
-
#往父表中添加数据 insert into demo_class(classno,classname) values (100,'铜仁市第一中学'); insert into demo_class(classno,classname) values (101,'铜仁市第二中学'); insert into demo_class(classno,classname) values (102,'铜仁市第三中学'); #往子表中插入数据 insert into demo_student(name,cno) values ('张三',100); insert into demo_student(name,cno) values ('李四',100); insert into demo_student(name,cno) values ('王五',100); insert into demo_student(name,cno) values ('毛少',100); insert into demo_student(name,cno) values ('赵六',101); insert into demo_student(name,cno) values ('谢七',101); insert into demo_student(name,cno) values ('邱八',102); insert into demo_student(name,cno) values ('张三丰',102);
-
-
数据插入成功以后,可以先检查一下
select * from demo_class
select * from demo_student
-
可以看见表中的数据都是好的,如果要查询名字和班级,可以使用表连接
select ts.name,tc.classname from demo_student ts join demo_class tc on ts.cno=tc.classno;
-