【归纳总结】数据库之约束、多表、范式、连接、备份

约束

六大约束:primary key(主键约束)、foreign key(外键约束)、unique(唯一性约束)、not null(非空约束)、default(默认值约束)、check(自定义约束)

primary key、not null 在之前的文章已经提到了

unique 和主键的区别:主键不可以为null, unique可以为null

当我们插入外键的值的时候,那么他就会去关联外键的表里面去找有没有该值,假如有,就插入,假如没有,就不让插入,报错,在工作中,一般不使用外键

多表设计

  1. 一对一
    例如:学生和学号,商品和商品详情,一般把它们合并,放到一个表里面去
    但是有时候需要进行拆分,例如商品对应库存,主要从性能的角度考虑
  2. 一对多
    例如:班级和学生,订单和商品
    关系维护在多的一方
  3. 多对多
    例如:学生和课程、用户和商品
    新建一个关系表去维护

三大范式

  1. 每列保持原子性
    要求表的每个字段必须是不可分割的独立单元。
    【归纳总结】数据库之约束、多表、范式、连接、备份
  2. 记录唯一性
    每张表只表达一个意思。表的每个字段都和表的主键有依赖。【归纳总结】数据库之约束、多表、范式、连接、备份
  3. 数据不要冗余
    每张表的主键之外的其他字段都只能和主键有直接依赖(绝对)关系。【归纳总结】数据库之约束、多表、范式、连接、备份
    但是我们在设计表的时候,可能因为一定原因(比如:为了方便)而使表的数据冗余提高,即反范式化操作,它可以给我们带来查询性能上的巨大提升,一切要以实际情况以及需求而定。

连接查询

  • 内连接用的最多
    【归纳总结】数据库之约束、多表、范式、连接、备份
//内连接
select * from customer inner join orders on orders.customer_id = customer.id where customer.name = '郭靖';

//隐式内连接
select * from customer as c,orders as o where  c.id = o.customer_id and c.name = '郭靖';
  • 左外连接
select * from customer as c left  join orders as o  on c.id = o.customer_id;
  • 右外连接
select * from orders as o right JOIN customer as c on c.id = o.customer_id;
  • 子查询
select * from orders where customer_id = (select id from customer where name = '郭靖');
  • 联合查询

select * from t_students where chinese > 80
union 
select * from t_students where class = '二班';

数据恢复与备份

// 数据备份
mysqldump -u root -p database_name sql.sql

// 数据恢复
source [sql文件全路径]
上一篇:零代码实现一对一表关系和无限主子表级联保存


下一篇:深入理解 ProtoBuf 原理与工程实践(概述)