多表关联
Posted xiamenghan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多表关联相关的知识,希望对你有一定的参考价值。
将部门数据与员工数据放到同一张表中,一个部门有多个员工,就意味着数据可能会重复,维护性差,所以我们需要分表,建立他们之间的关联,就通过外键(FOREIGN KEY)来建立约束。
create table 表名(字段名 类型(长度),
foreign key (外键的字段名称)
references 对方表名(对方主键名));
强调:使用外键时 必须分清主从关系
先建主表再建从表;先插入主表记录再插入从表记录;先删除主再删从;在表中更新外键时,必须保证外键是存在的;更换或更新主表主键 必须先删除与主表有关联的从表的数据;删除主表要先删除从表,如果觉得删除麻烦,可以使用级联。
#主表 create table school(id int primary key auto_increment); #从表 create table stu(id int primary key auto_increment, s_id int, foreign key (s_id) references school(id) on delete cascade on update cascade); on delete cascade#当主表删除记录时 从表相关联的记录同步删除 on update cascade#当主表id更新时 从表相关联的记录同步更新 注意:从表的变化不会级联到主表,只有主表的变化级联操作从表 级联示例
#多对多关系 一个老师可以教多个学生,而多个学生也可以有多个老师
#主表 create table teacher(id int primary key auto_increment ,name char); #从表 create table stu(id int primary key auto_increment,name char); #中间表 create table t_s(id int primary key auto_increment, t_id int ,s_id int, foreign key(t_id) references teacher(id), foreign key(s_id) references stu(id)); 用一个中间表来专门存储关联关系,老师和学生都是主表,中间表是从表
#一对一关系 一个居民只有一张身份证,一张身份证也只能对应一个居民 需要加上unique
#主表 create table people(id int primary key auto_increment, name char ,addr char); #从表 create table idcard(id int primary key auto_increment, name char, num int, p_id int unique, foreign key(p_id) references people(id));
修改表、复制表
add 添加字段 after|first
after 添加字段到哪个字段后面
first 添加字段到最前面
modify 修改字段类型
change 修改字段名称 或 类型
drop 删除字段
rename 改表名
create table 新表名 select *from 原表名 #能复制数据结构 不能复制约束 create table 新表名 select *from 原表名 where 1=2 #条件不成立时,只能复制表的结构
以上是关于多表关联的主要内容,如果未能解决你的问题,请参考以下文章