MySQL 數據類型mysql
整型:tinyint、smallint、mediumint、int、bigint 小數型:float、double、decimal 字符串型:varchar、char、text、blob 時間日期型:time、date、datetime、timestamp 枚舉類型:enum
在定義
整型數據類型
時,常常看到 int(4) 括號裏指定的是顯示長度
,不限制值合法範圍,這個顯示長度要配合zerofill
這個屬性纔有意義。sql
一、 VARCHAR 比 CHAR 更節約空間
二、 CHAR 比 VARCHAR 存儲效率更好
三、 VARCHAR 與 CHAR 的長度,若是存儲內容超出指定長度,會被截斷
四、 存儲常常改變的數據,CHAR 不容易產生碎片數據庫
儘可能避免使用 BLOB/TEXT 類型,致使嚴重的性能開銷安全
一、 有時可使用枚舉類型代替字符串類型
二、 枚舉類型內部存儲成整型(節省空間)
三、 避免使用數字做爲 enum枚舉 的常量,易混亂服務器
一、 儘可能使用 TIMESTAMP 來保存時間日期數據
二、 若是須要存儲微秒, 可使用 BIGINT 類型併發
MySQL 基礎操做負載均衡
鏈接與關閉:
mysql -u -p -h -P
函數
MySQL 存儲引擎(數據表)性能
MyISAM與InnoDB的區別
日誌
一、 InnoDB支持事務,MyISAM不支持事務 二、 InnoDB支持行級鎖,MyISAM支持表鎖 三、 InnoDB數據存儲在共享表空間,MyISAM數據存儲在MyD文件和MyI文件 四、 InnoDB支持奔潰後的安全恢復,MyISAM不支持 五、 InnoDB對主鍵查詢的性能高於其餘存儲引擎 六、 MyISAM擁有全文索引、壓縮、空間函數
MySQL 鎖機制
因爲併發操做的產生,因此須要
使用鎖進行併發控制
鎖分爲2種:共享鎖
和排他鎖
,就是讀鎖
和寫鎖
共享鎖(讀鎖),不堵塞,多個用戶能夠同時讀同一資源,互不干擾 排他鎖(寫鎖),一個寫鎖會阻塞其餘讀鎖和寫鎖,這樣只容許一我的進行寫入操做,防止其餘人進行讀取或者寫入
注意:InnoDB支持行級鎖,MyISAM支持表鎖
MySQL 事務處理
注意:使用事務的前提是
表必須是InnoDB引擎
SQL注入
使用
預處理
來防止SQL注入
特殊字符轉義
寫入數據庫的數據必須通過
特殊字符轉義
操做,此操做在應用層進行
錯誤記錄
當發生查詢錯誤時,不能把
錯誤信息
返回給用戶,把錯誤記錄到日誌
使用索引的優缺點
優勢: 一、減小服務器掃描的數據量 二、避免排序和臨時表 三、隨機I/O變順序I/O 四、提升查詢速度 缺點: 一、下降寫的速度 二、佔用磁盤
索引使用場景
很是小的表(1~1000) 不使用索引 中型(1000~100W) 使用索引 大型(100W~1000W) 使用索引 超大(1000W以上) 索引 + 分區技術
索引類型
一、普通索引 二、惟一索引 (在普通索引的基礎上,加上惟一約束) 三、主鍵索引 (在惟一索引的基礎上,加上不能爲Null) 四、組合索引 五、全文索引 (少用,只適合英文) 六、外鍵索引 (少用,使用業務邏輯進行數據關聯)
索引建立原則
一、最適合索引的列是出如今where子句中的列,或鏈接子句中的列,而不是出如今SELECT關鍵字後的列 二、索引列基數越大,效果越好 三、對字符串進行索引,應該制定一個前綴長度,能夠節省大量索引空間 四、根據狀況建立複合索引,複合索引能提升查詢效率 五、避免建立過多的索引 六、主鍵儘可能選擇較短的數據類型
索引注意事項
一、複合索引遵循前綴原則(重要,按順序) 二、like查詢,%不能在前面(在前面索引會失效,若是要在前面請使用第三方全文索引) 三、列is Null也是可使用索引 四、若是OR條件想用到索引,必須or先後的字段都須要是索引字段 五、列是字符串類型時,查詢時必定要使用引號(單或雙),索引纔會生效
關聯操做
一、關聯更新 二、關聯查詢
鏈接方式
一、交叉鏈接 Cross join (無條件) select * from A CROSS JOIN B CROSS JOIN C; 二、內鏈接 INNER JOIN (有條件的交叉鏈接) 簡寫 JOIN select * from A INNER JOIN B INNER JOIN C ON A.id = B.id; select * from A,B where A.id = B.id; select * from A T1 INNER JOIN A T2 ON T1.id = T2.id; 三、外鏈接 左外鏈接 LEFT JOIN 右外鏈接 RIGHT JOIN 四、聯合鏈接 (UNION重複的合併,UNION ALL重複的不合並) SELECT * FROM position UNION SELECT * FROM team; SELECT * FROM position UNION ALL SELECT * FROM team; **UNION ALL性能高於UNION** 五、全鏈接(MySQL不支持)
分庫
分表(水平與垂直)
讀寫分離
主從複製
負載均衡