多表关联

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

猜你喜欢

转载自www.cnblogs.com/xiamenghan/p/9997665.html