數據庫-Mysql

數據庫三範式sql

  第一範式:表中每一個字段都不能再分。數據庫

  第二範式:知足第一範式而且表中的非主鍵字段都依賴於主鍵字段。編程

  第三範式:知足第二範式而且表中的非主鍵字段必須不傳遞依賴於主鍵字段。後端

數據庫事務緩存

  幾個SQL語句,要麼所有執行成功,要麼所有執行失敗。好比銀行轉帳就是事務的典型場景。spa

  特性:原子性,一致性,隔離性,持久性。線程

  事務三個經常使用命令:Begin Transaction、Commit Transaction、RollBack Transaction。日誌

數據庫索引code

  索引是對數據庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問數據庫表中的特定信息。blog

  索引分類: 

    主鍵索引(PRIMAY KEY)  ALTER TABLE 'table_name' ADD PRIMARY KEY pk_index('col');

    惟一索引(UNIQUE)     ALTER TABLE 'table_name' ADD UNIQUE index_name('col');

    常規索引(INDEX)      ALTER TABLE 'table_name' ADD INDEX index_name('col');

    全文索引(FULLTEXT)    ALTER TABLE 'table_name' ADD FULLTEXT INDEX ft_index('col');

    組合索引           ALTER TABLE 'table_name' ADD INDEX index_name('col1','col2','col3');

 Mysql存儲引擎

  

Mysql的存儲過程

  Mysql5.0之前並不支持存儲過程,5.0之後開始支持存儲過程,大大提升了數據庫的處理速度,同時也能夠提升數據庫編程的靈活性。

  CREATE PROCEDURE  過程名([[IN|OUT|INOUT] 參數名 數據類型[,[IN|OUT|INOUT] 參數名 數據類型…]]) [特性 ...] 過程體

DELIMITER //
  CREATE PROCEDURE myproc(OUT s int)
    BEGIN
      SELECT COUNT(*) INTO s FROM students;
    END
    //
DELIMITER ;

  分隔符  

    MySQL默認以";"爲分隔符,若是沒有聲明分割符,則編譯器會把存儲過程當成SQL語句進行處理,所以編譯過程會報錯,因此要事先用「DELIMITER //」聲明當前段分隔符,讓編譯器把兩個"//"之間的內容當作存儲過程的代碼,不會執行這些代碼;「DELIMITER ;」的意爲把分隔符還原。

  參數  

    存儲過程根據須要可能會有輸入、輸出、輸入輸出參數,若是有多個參數用","分割開。MySQL存儲過程的參數用在存儲過程的定義,共有三種參數類型,IN,OUT,INOUT:

    IN參數的值必須在調用存儲過程時指定,在存儲過程當中修改該參數的值不能被返回,爲默認值OUT:該值可在存儲過程內部被改變,並可返回INOUT:調用時指定,而且可被改變和返回

  過程體

    過程體的開始與結束使用BEGIN與END進行標識。

 

Mysql主從複製原理

  1.主庫全部的寫操做記錄在二進制日誌文件中,生成日誌dump線程

  2.將二進制日誌文件傳給從庫的IO線程

  3.從庫生成兩個線程,一個是IO線程,一個是SQL線程

  4.IO線程去讀取主庫的二進制文件,並將二進制文件的內容寫入到中繼日誌中

  5.SQL線程讀取中繼日誌文件的內容並解析成具體的操做,實現主從的操做一致性,達到最終數據一致性。

 

MyCat實現讀寫分離

  MyCat的原理中最重要的一個動詞就是「攔截」,它攔截了用戶發送過來的sql語句,進行分析sql語句。好比分片分析,路由分析,讀寫分離分析,緩存分析等,

  而後將sql發日後端的真實數據庫,並將返回的結果進行適當的處理,最終返回給用戶。

相關文章
相關標籤/搜索