SQL数据库笔记
一.数据库设计
-
是否建索引
广义:主键,外键,唯一约束unique,索引(key/index)
狭义:索引提升查询速度,降低增删改的速度,
使用场景:经常出现在where条件后的字段,经常过滤依据的字段,字段的值多样性不能单一越多越好(多样性指的是字段值的可能性越多越好) -
数据库引擎的选择
决定数据库的保存方式和解析mysql语句后执行的方式,可以对不同的表设置不同的引擎
InnoDB:默认引擎,支持事务,外键
MYISAM:不支持事务,查询快, -
外键
不创建外键仍然能够完成数据库的增删改查
外键的作用:维护数据的完整性:delete,update
项目初期:可以创建外键,由数据库帮助完成数据完整性的约束
项目后期:一般会移除外键
不影响其他表,影响查询速度
二.ORM
-
理解orm
(1) 帮助我们生成创建表的sql语句,是应用程序和数据的桥梁。
(2) 作用:
① 省去自己拼写SQL,保证SQL语法的正确性
② 一次编写可以适配多个数据库
③ 防止注入攻击
④ 在数据库表明或字段名发生变化时,只需要修改模型类的映射,无需修改数据库操作的代码 -
数据库如何使用
(1) 不借助orm,直接自己编写sql语句操作数据库
(2) 借助orm,由orm同时完成表结构的创建和表数据的增删改查操作,意思是先创建模型类,对模型类进行迁移,同步到数据库中完成表的创建,后续通过模型类进行数据的增删改查 (makemigration migrate)
(3) 直接自己编写定义表(包括创建和修改)的sql语句,然后补充模型类做映射,再借助模型类完成数据的增删改查
3.SQLAlchemy
独立的开源python的orm框架
Flask-SQLAlchemy是SQLAlchemy在flask中使用为了方便设计的扩展,是对SQLAlchemy的封装
sqlalchemy的session是用来记录数据库操作的中间层存储,提供了事务的支持
三. 数据库理论
1.复制集与分布式
复制集 数据相同分布式集群
分片
主>充当数据保存的主力,增加修改删除发生的机器
从>起到数据备份的作用,不用来当做数据处理的主力,不在这样的机器上进行增删改,数据从主力机器中复制而来.
2.MySQL
● 读写分离对事物的影响:
● 分库分表:垂直分库,垂直分表水平分库,水平分表
项目前期起步阶段不考虑分库分表,演进到数量巨大时(千万条数据就可以考虑),
面临的问题:事务支持;多库结果集合并(group by, order by);跨库join .