码迷,mamicode.com
首页 > 其他好文 > 详细

多表关联

时间:2018-11-21 22:13:29      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:hide   incr   ima   修改   更换   reference   where   一对一   身份证   

将部门数据与员工数据放到同一张表中,一个部门有多个员工,就意味着数据可能会重复,维护性差,所以我们需要分表,建立他们之间的关联,就通过外键(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
#条件不成立时,只能复制表的结构
复制表

 

多表关联

标签:hide   incr   ima   修改   更换   reference   where   一对一   身份证   

原文地址:https://www.cnblogs.com/xiamenghan/p/9997665.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!