mysql+redis+memcached

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语句。

 

分类: mysql
标签: mysql
0
0
« 上一篇: 复习-网路编程和并发编程
posted @ 2018-11-21 20:10 hnlmy 阅读( 2) 评论( 0) 编辑 收藏
相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息