數據庫三範式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發日後端的真實數據庫,並將返回的結果進行適當的處理,最終返回給用戶。