前言
本篇博客主要内容为表之间的关系、多表关联、复制表;查询如单表查询、多表关联查询
表之间关系
为什么要分表?
假如现在有两种数据,一种是部门数据一种是员工数据,如果两中数据放在同一张表中则会造成:
- 数据重复
- 结构混乱
- 扩展维护性差
- 需要分表
所以需要把表中会造成混乱的数据分出来,分成两张表。
mysql> create table dept(id int primary key auto_increment,name char(20),job char(20));mysql> create table emp(id int primary key auto_increment,name char(20),gender char,age int,salary float,d_id int);什么时候需要分表?
当出现大量重复数据时,当一条记录中的数据不属于同一类时需要分表。
分表之后产生的问题,员工表可以存储一个不存在的部门编号,这样的数据是不完整的无效数据,必须找到一种方法可以在物理层面建立关联关系。
以上建表语句可以建立逻辑上的关联关系,这有建表的人才明白其中的关系,而 mysql 并不知道关系,所以需要通过外键来进行约束,说明这两张表的关联关系。
外键的使用
mysql> create table 表名(字段名 类型(长度),foreign key(外键的字段名) references 要关联表名(主键名));使用外键时必须分清主从关系,也就是要分清先键那张表,因为在使用外键关联表时,需要知道对方表的表名,所以要关联的表应该是主表,应该先建主表,这样才能关联起来。
外键的第一个约束
先键主表,再建从表
mysql> create table dept(id int primary key auto_increment,name char(20),job char(20));mysql> create table emp(id int primary key auto_increment,name char(20),d_id int,foreign key(d_id) references dept(id));外键的第二个约束
数据先插入主表,再插入从表数据
mysql> insert into dept values(1,'hr','招聘');mysql> insert into emp values(1,'张无忌',1);外键的第三个约束
删除数据时先删从表,再删主表
mysql> delete from emp where name = '张无忌';
