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) 編輯 收藏
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息