mysql+redis+memcached
数据库
数据库设计
a. 单表
b. FK(单表;一张表存储时,若是有重复出现的字段为了防止硬盘的浪费,因此作一个FK;去掉FK变成单表(这样子访问速度快了))
c. M2M(多对多关系)
究竟是什么关系?
单选的下拉框/radio FK;多选下拉框/checkbox M2M
举个小例子:html
问题:员工信息表员工当前薪资;保留员工的全部的调薪记录。
思路一:两张表
员工表:
id name salary
调薪:
id price time 员工ID
思路二:三张表
员工表:
id name salary
调薪:
id price time
员工调薪表:
id uid sid
基本SQL
分组(group by)
select depart_id,count(1),max(salary),min(age),sum(age) from user group by depart_id select depart_id,count(1),max(salary),min(age),sum(age) from user group by depart_id having count(1)>5
注意事项:前端
经过聚合条件group by而后进行筛选的用having不能用where
连表
inner join / left join / right join
inner join是保留两个共有的,若是一个没有就不保留。
left join 是以左表为主表,若是右表没数据,则为null
right join 是以右表为主表,若是左表没数据,则为null
举个小例子:mysql
数据: 部门表: id title 1 销售 2 运营 3 IT 用户表: id name 部门id 1 x1 1 2 x2 1 3 x3 1 4 x4 1 5 x5 1
请问查到多少条数据? select * from userinfo left join depart on userinfo.did = depart.id 5 select * from depart left join userinfo on userinfo.did = depart.id 7 select * from userinfo inner join depart on userinfo.did = depart.id 5 select * from depart inner join userinfo on userinfo.did = depart.id 5
MySQL数据库引擎以及区别?
a. 常见innodb、mysiam b. 区别: - innodb: - 支持事务(特性:原子性、一致性、隔离性、持久性) 事务就是(要完成都完成,要不完成就回滚) - 表锁 - 行锁 - mysiam - 不支持事务 - 表锁 - 全文索引 - 速度快
补充: 原生SQL begin; select * from xxx for update; update ... commit; django: with trancation.automic: User.objects.filter().select_for_update()
应用场景:商品数据计数。
索引
做用: - 加速查找 - 约束 种类: - 索引:随便写 - 惟一索引:容许Null + 不重复 - 主键索引:不容许Null + 不重复 - 联合索引:多列组成一个索引 - 联合惟一索引:多列组成一个索引 + 惟一 例如: name email pwd 命中索引遵循最左前缀的原则: name、name email、name pwd、name email pw
补充: - 覆盖索引,当查找数据时候在索引表中就能够获取数据,无需去数据表中查找。 select name from user where name='xxx' - 索引合并, 使用多个单列索引进行查找。 select * from user where name='xx' email='xx' 为何索引快? 由于在索引结构中讲述按照B+来进行存放的数据。
优化数据库方案
a. 索引。 b. 固定长度的字段写在前面。 id name age < id age name c. 对于固定选择的内容:性别,能够将其对应关系保存在内存中。 d. 分表 - 垂直分分,将数据分割到N张表。 - 水平分分,将列分到到N种表。 e. 分库 f. 读写分离(主从复制) 主:读写 从:读 在django中的应用: models.Users.objects.filter(id=2).using('default') models.Users.objects.filter(id=2).using('db1') g. limit select * from tb where name='alex' limit 1; h. 缓存 将经常使用数据读取到redis中(缓存),读取速度快。
char和varchar的区别。
char是定长,不变的。
varchar是变长,可变的。
视图、触发器、存储过程、函数
视图:视图是虚拟表或逻辑表,它被定义为具备链接的SQL SELECT查询语句。由于数据库视图与数据库表相似,它由行和列组成,所以能够根据数据库表查询数据。其内容由查询定义。
可是,视图并不在数据库中以存储的数据值集形式存在,行和列数据来自由定义视图的查询所引用的表,而且在引用视图时动态生成。简单的来讲视图是由其定义结果组成的表;
触发器:触发器,是一个表数据的变动后经过触发器来修改与之相关联的其余表的数据,保证数据的一致性。使用触发器能够定制用户对表进行【增、删、改】操做时先后的行为,注意:没有查询
存储过程是存储在数据库目录中的一坨的声明性SQL语句。
Java,Python,PHP等应用程序能够调用存储过程。
mysql自定义函数就是实现程序员须要sql逻辑处理,参数是IN参数,含有RETURNS字句用来指定函数的返回类型,并且函数体必须包含一个RETURN value语句。
【活动】申请成为华为云云享专家 尊享9大权益
【工具】SpreadJS纯前端表格控件,可嵌入应用开发的在线Excel
【腾讯云】拼团福利,AMD云服务器8元/月
· Memcached和Redis
· Redis、RabbitMQ、Memcached
· Memcached、Redis OR Tair
· Memcached与Redis
· Redis Vs Memcached
· 愈来愈像微信的WhatsApp,能成功变现吗?
· 这25个开源机器学习项目,通常人我不告诉Ta
· Google更新首页涂鸦庆祝感恩节的到来
· 详解阿里健康2019财年半年报:九成收入来自医药电商
· 谷歌计划在Chrome中添加标签滚动功能 以帮助那些标签超载的用户
» 更多新闻...