表关系
在开发项目时,需要根据业务需求去创建很多的表结构,以此来实现业务逻辑,一般表结构有三类:
- 单表,单独一张表就可以将信息保存。

- 一对多,需要两张表来存储信息,且两张表存在
一对多或多对一关系。

创建表时创建外键(depart表创建方式和原来一样):
create table info(
id int not null auto_increment primary key,
name varchar(16) not null,
email varchar(32) not null,
age int,
depart_id int not null,
constraint fk_info_depart foreign key (depart_id) references depart(id)
--- constraint 约束;foreign key 外键;references 关联
)default charset=utf8;
当表已经创建完成,这时需要额外增加外键:
alter table info add constraint fk_info_depart foreign key info(depart_id) references depart(id);
删除外键:
alter table info drop foreign key fk_info_depart;
- 多对多,需要三张表来存储信息,两张单表 + 关系表,创造出两个单表之间多对多关系。

创建表时创建外键(boy和girl表创建方式与原来一样):
create table boy_girl(
id int not null auto_increment primary key,
boy_id int not null,
girl_id int not null,
constraint fk_boy_girl_boy foreign key boy_girl(boy_id) references boy(id),
constraint fk_boy_girl_girl foreign key boy_girl(girl_id) references girl(id)
)default charset=utf8;
如果表结构已创建好了,额外想要增加外键:
alter table boy_girl add constraint fk_boy_girl_boy foreign key boy_girl(boy_id) references boy(id);
alter table boy_girl add constraint fk_boy_girl_girl foreign key boy_girl(girl_id) references girl(id);
删除外键:
alter table info drop foreign key fk_boy_girl_boy;
alter table info drop foreign key fk_boy_girl_girl;
案例:简易版路飞学城

create database luffy default charset utf8 collate utf8_general_ci; --创建数据库
use luffy; --进入数据库
--创建info表
create table info(
id int not null auto_increment primary key, --不能为空,主键,自增
username varchar(16) not null,
mobile char(11) not null,
password varchar(64) not null
)default charset=utf8;
--创建course表
create table course(
id int not null auto_increment primary key,
title varchar(16) not null
)default charset=utf8;
--创建module表,course_id为外键,与 course表中的id进行关联
create table module(
id int not null auto_increment primary key,
title varchar(16) not null,
course_id int not null,
constraint fk_module_course foreign key (course_id) references course(id)
)default charset=utf8;
--创建day表,module_id为外键,与module表中的id进行关联
create table day(
id int not null auto_increment primary key,
title varchar(16) not null,
module_id int not null,
constraint fk_day_module foreign key (module_id) references module(id)
)default charset=utf8;
--创建video表,day_id为外键,与day表中的id进行关联
create table video(
id int not null auto_increment primary key,
title varchar(16) not null,
day_id int not null,
constraint fk_video_day foreign key (day_id) references day(id)
)default charset=utf8;
--创建module_record表,user_id和module_id为外键,分别与info中id,module表中id进行关联
create table module_record(
id int not null auto_increment primary key,
user_id int not null,
module_id int not null,
constraint fk_user_id foreign key module_record(user_id) references info(id),
constraint fk_module_id foreign key module_record(module_id) references module(id)
)default charset=utf8;
浙公网安备 33010602011771号