學習筆記之MySQL

SQL Fiddle(在線執行SQL語句的網站)css

  • http://www.sqlfiddle.com/

MySQLhtml

  • https://www.mysql.com/

MySQL :: MySQL 5.7 Reference Manual :: 13 SQL Statement Syntaxmysql

  • https://dev.mysql.com/doc/refman/5.7/en/sql-syntax.html

mySQL(關係型數據庫管理系統)_百度百科面試

  • https://baike.baidu.com/item/mySQL/471251?fr=aladdin

MySQL 教程 | 菜鳥教程正則表達式

  • http://www.runoob.com/mysql/mysql-tutorial.html

面試總結之Database / SQL - 浩然119 - 博客園sql


MySQL知識點總結數據庫

MySql語句大全:建立、受權、查詢、修改等segmentfault

  • http://blog.csdn.net/evankaka/article/details/45580845

一份很是完整的MySQL規範安全

MySQL 索引原理及設計 - 數據庫開發性能優化

  • https://mp.weixin.qq.com/s/1MNj9v3IfKR9FUiA92mXFA
  • https://icell.io/how-mysql-index-works/

終於把MySQL索引的那些事兒說清楚了

圖解MySQL索引--B-Tree(B+Tree)

MySQL索引和SQL調優手冊

這種 SQL 寫法會致使索引失效?

我想說:MySQL的join真的很弱

史上最全SQL優化方案 - CSDN雲計算

  • https://mp.weixin.qq.com/s/x5oguwfTC8fhqzFfR4Fpug

12 條 MySQL 優化技巧 - 數據分析與開發

  • https://mp.weixin.qq.com/s/ykvH4HEGbG7FPG4AtnXwqQ

MySQL數據庫優化

  • https://mp.weixin.qq.com/s/eBHM3YQ2vAZAN6xiY5fxWw
  • https://segmentfault.com/a/1190000018631870

MySQL性能優化之神技 

SQL 性能優化梳理

MySQL慢查詢記錄原理和內容解析

MySQL EXPLAIN結果集分析 - 附帶大量案例

億級用戶的分佈式數據存儲解決方案

架構祕笈:移花接木。使用MySQL模擬Redis

8種常被忽視的SQL錯誤用法 - 數據庫開發

  • https://mp.weixin.qq.com/s/6_M-Z-XimG8DgkVW85-6Hw
  • https://yq.aliyun.com/articles/72501 

10種常見的MySQL錯誤,你可中招?


  • MySQL支持大型數據庫,支持5000萬條記錄的數據倉庫,32位系統表文件最大可支持4GB,64位系統支持最大的表文件爲8TB。
  • 如下爲在MySQL數據庫中查詢數據通用的 SELECT 語法:SELECT column_name,column_name FROM table_name [WHERE Clause] [OFFSET M ] [LIMIT N]
  • 你能夠經過OFFSET指定SELECT語句開始查詢的數據偏移量。默認狀況下偏移量爲0。
  • 你可使用 LIMIT 屬性來設定返回的記錄數。
  • WITH ROLLUP 能夠實如今分組統計數據基礎上再進行相同的統計(SUM,AVG,COUNT…)。
  • 咱們可使用 coalesce 來設置一個能夠取代 NUll 的名稱
  • 咱們已經知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句來讀取數據表中的數據,可是當提供的查詢條件字段爲 NULL 時,該命令可能就沒法正常工做。爲了處理這種狀況,MySQL提供了三大運算符:關於 NULL 的條件比較運算是比較特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
    • IS NULL: 當列的值是 NULL,此運算符返回 true。
    • IS NOT NULL: 當列的值不爲 NULL, 運算符返回 true。
    • <=>: 比較操做符(不一樣於=運算符),當比較的的兩個值爲 NULL 時返回 true。
  • 在 MySQL 中,NULL 值與任何其它值的比較(即便是 NULL)永遠返回 false,即 NULL = NULL 返回false 。
  • MySQL 中處理 NULL 使用 IS NULL 和 IS NOT NULL 運算符。
  • MySQL 一樣也支持其餘正則表達式的匹配, MySQL中使用 REGEXP 操做符來進行正則表達式匹配。
  • 下表中的正則模式可應用於 REGEXP 操做符中。
模式 描述
^ 匹配輸入字符串的開始位置。若是設置了 RegExp 對象的 Multiline 屬性,^ 也匹配 '\n' 或 '\r' 以後的位置。
$ 匹配輸入字符串的結束位置。若是設置了RegExp 對象的 Multiline 屬性,$ 也匹配 '\n' 或 '\r' 以前的位置。
. 匹配除 "\n" 以外的任何單個字符。要匹配包括 '\n' 在內的任何字符,請使用象 '[.\n]' 的模式。
[...] 字符集合。匹配所包含的任意一個字符。例如, '[abc]' 能夠匹配 "plain" 中的 'a'。
[^...] 負值字符集合。匹配未包含的任意字符。例如, '[^abc]' 能夠匹配 "plain" 中的'p'。
p1|p2|p3 匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 則匹配 "zood" 或 "food"。
* 匹配前面的子表達式零次或屢次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等價於{0,}。
+ 匹配前面的子表達式一次或屢次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於 {1,}。
{n} n 是一個非負整數。匹配肯定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',可是能匹配 "food" 中的兩個 o。
{n,m} m 和 n 均爲非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。

  • MySQL 事務主要用於處理操做量大,複雜度高的數據。好比說,在人員管理系統中,你刪除一我的員,你即須要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些數據庫操做語句就構成一個事務!
    • 在 MySQL 中只有使用了 Innodb 數據庫引擎的數據庫或表才支持事務。
    • 事務處理能夠用來維護數據庫的完整性,保證成批的 SQL 語句要麼所有執行,要麼所有不執行。
    • 事務用來管理 insert,update,delete 語句
  • 通常來講,事務是必須知足4個條件(ACID): Atomicity(原子性)、Consistency(穩定性)、Isolation(隔離性)、Durability(可靠性)在 MySQL 命令行的默認設置下,事務都是自動提交的,即執行 SQL 語句後就會立刻執行 COMMIT 操做。所以要顯式地開啓一個事務務須使用命令 BEGIN 或 START TRANSACTION,或者執行命令 SET AUTOCOMMIT=0,用來禁止使用當前會話的自動提交。
    • 一、事務的原子性:一組事務,要麼成功;要麼撤回。
    • 二、穩定性 :有非法數據(外鍵約束之類),事務撤回。
    • 三、隔離性:事務獨立運行。一個事務處理後的結果,影響了其餘事務,那麼其餘事務會撤回。事務的100%隔離,須要犧牲速度。
    • 四、可靠性:軟、硬件崩潰後,InnoDB數據表驅動會利用日誌文件重構修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit 選項 決定何時吧事務保存到日誌裏。
  • 若是須要修改字段類型及名稱, 你能夠在ALTER命令中使用 MODIFY 或 CHANGE 子句 。
  • 有四種方式來添加數據表的索引:你可使用 SHOW INDEX 命令來列出表中的相關的索引信息。能夠經過添加 \G 來格式化輸出信息。
    • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 該語句添加一個主鍵,這意味着索引值必須是惟一的,且不能爲NULL。
    • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 這條語句建立索引的值必須是惟一的(除了NULL外,NULL可能會出現屢次)。
    • ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出現屢次。
    • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):該語句指定了索引爲 FULLTEXT ,用於全文索引。
  • 你也可使用 SHOW TABLES 或 SHOW DATABASES 語句來獲取數據庫和數據表列表。
  • 如下命令語句能夠在 MySQL 的命令提示符使用,也能夠在腳本中 使用,如PHP腳本。
命令 描述
SELECT VERSION( ) 服務器版本信息
SELECT DATABASE( ) 當前數據庫名 (或者返回空)
SELECT USER( ) 當前用戶名
SHOW STATUS 服務器狀態
SHOW VARIABLES 服務器配置變量
  • MySQL中最簡單使用序列的方法就是使用 MySQL AUTO_INCREMENT 來定義列。
  • 如下咱們將統計表中 first_name 和 last_name的重複記錄數:SELECT COUNT(*) as repetitions, last_name, first_name FROM person_tbl GROUP BY last_name, first_name HAVING repetitions > 1;
  • 若是你須要讀取不重複的數據能夠在 SELECT 語句中使用 DISTINCT 關鍵字來過濾重複數據。你也可使用 GROUP BY 來讀取數據表中不重複的數據:SELECT last_name, first_name FROM person_tbl GROUP BY (last_name, first_name);
  • 固然你也能夠在數據表中添加 INDEX(索引) 和 PRIMAY KEY(主鍵)這種簡單的方法來刪除表中的重複記錄。
  • 若是您經過網頁獲取用戶輸入的數據並將其插入一個MySQL數據庫,那麼就有可能發生SQL注入安全的問題。所謂SQL注入,就是經過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。
  • 防止SQL注入,咱們須要注意如下幾個要點:
    • 1.永遠不要信任用戶的輸入。對用戶的輸入進行校驗,能夠經過正則表達式,或限制長度;對單引號和 雙"-"進行轉換等。
    • 2.永遠不要使用動態拼裝sql,可使用參數化的sql或者直接使用存儲過程進行數據查詢存取。
    • 3.永遠不要使用管理員權限的數據庫鏈接,爲每一個應用使用單獨的權限有限的數據庫鏈接。
    • 4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
    • 5.應用的異常信息應該給出儘量少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝
    • 6.sql注入的檢測方法通常採起輔助軟件或網站平臺來檢測,軟件通常採用sql注入檢測工具jsky,網站平臺就有億思網站安全平臺檢測工具。MDCSOFT SCAN等。採用MDCSOFT-IPS能夠有效的防護SQL注入,XSS攻擊等。
相關文章
相關標籤/搜索