Mysql 筆記之基礎知識
Mysql中的字符的大小寫
1、SQL關鍵字和內置函數名不區分大小寫,比如SELECT,可寫成select要遵循一種風格。
2、數據庫、表、索引及視圖的名稱是是否區分大小寫取決於低層的os和FS。
3、存儲過程,存儲函數及事件調度器不區分字符大小寫,但觸發器區分大小寫;
4、表名不區分大小寫
5、字段中字符數據,類型binary、blog、varbinary區分大小寫
>CREATE DATABASE IF NOT EXISTS tb_test;
>SHOW GLOBAL VARIABLES LIKE ‘%char%’;
在mysql客戶端與服務器端
CHARACTER SET [=] charset
在DDL中CREATE/ALTER/DROP
數據字典就是存取數據元數據的數據集,
DROP DATABASE IF EXISTS db_name
表的創建
約束有主鍵、唯一鍵、外鍵(約束)
索引:特殊的數據結構,用於快速找到數據記錄,鍵可用做索引(是一種特殊的索引),但並非所有索引都是鍵。
索引類型:B-Tree索引,(B+ Tree,B- Tree),hash(哈希索引)講一個數據切成n段放到桶中,查找性能非常好,FullText(全文索引)某一個條目被用戶訪問的比較大,
>SELECT * FROM tb_test WHERE NAME LIKE ‘tom%’
使用索引優點:
1、大大減小服務器需要掃描的數據量;
2、索引可以幫服務器儘量避免進行排序及使用臨時表;
3、索引可以將隨機I/O轉換成順序I/O。
B-Tree索引的使用場景:1、全值匹配:比較操作符=,<=>;2、左前綴匹配:LIKE ‘tom%’
在姓名和性別上做索引,列前綴匹配;3、匹配範圍值;只訪問索引的查詢。覆蓋索引,從索引就可以直接得到最終結果。
哈希索引適用場景:
哈希只包含哈希值和行指針;不是按照索引值順序存儲的因此無法用於排序,不支持部分索引查找。哈希索引只支持等值比較查詢,包含=,IN(),<=>。哈希值有可能衝突,出現碰撞需二次查找。
聚集索引和非聚集索引,聚集索引是指索引和數據一起存放,索引順序文件。非聚集所以,索引和數據分開存放的,數據記錄未必順序存放,但索引數據一般順序存放,
創建表:1、手動創建CREATE TABLE tmp1 2、查詢其他表數據來創建表3、複製其它表的表結構
臨時表不能超過16M 有管理權限纔可以創建,
>CREATE TABLE tb (name CHAR(30) PRIMARY KEY,gender ENUM(‘m’,’f’));
>CREATE TABLE tb (name CHAR(30),gender ENUM(‘m’,’f’),PRIMARY KEY (name));這個可以創建多個主鍵,後接ENGINE ‘MYISAM’指明存儲引擎。
Table_option ENGINE=’innoDB’
>SHOW GLOBAL VARIABLE LIKE ‘%storage%’;查看存儲引擎
>SELECT @@SESSION.default_storage_engine;
AUTO_INCREMENT[=]value 自動增長
COMMANT[=] 註釋
>SHOW TABLE STATUS LIKE ‘tb2’\G
>CREATE TABLE tb_test2(name CHAR(20),gender ENUM(‘m’,’f’));//創建表tb_test2
>INSERT INTO tb_test2 VALUES(‘tom’,’m’),(‘jerry’,’f’);//插入信息
>CREATE TABLE tb_test3 SELECT * FROM tb_test2;//查詢表2信息創建表3。(第二種創建方法)
>CREATE TABLE tb_test4 LIKE tb_test2;//基於表2創建表4。(第三種創建方法)
刪除表:DROP
ALTER [ONLINE | OUTLINE] TABLE db_name
>ALTER TABLE tb_test5 ADD id INT UNSIGND NOT NULL AUTO_INCREMENT PRIMARY KEY;
>ALTER TABLE tb_test5 DROP PRIMARY KEY; //刪除索引
>ALTER TABLE tb_test5 MODIFY name CHAR(30) NOT NULL; 修改表5中的name信息。
>ALTER TABLE tb_test5 CHANGE name Name CHAR(30) NOT NULL; 修改名
>ALTER TABLE tb_test5 ADD INDEX (Name);添加name字段上索引。刪除的話ADD 換成DROP 就行了。
>ALTER TABLE tb_test5 RENAME TO students;//修改表名爲students //需謹慎
>RENAME TABLE students TO tb_test5;//再改過來
修改字符集
CONVERT TO CHARACTER SET charset_name
InnoDB表的表空間管理
>DISCARD TABLESPACE //刪除表空間
>IMPORT TABLESPACE //導入新的表空間
不可以隨便修改存儲引擎
ALTER TABLE 可實現添加刪除索引
CREATE INDEX index_name //也可以創建索引
SHOW INDEXS {FROM | IN} tb_name {FROM | IN } db_name;//查看索引
DROP {ONLINE | OFFLINE}INDEX index_name ON tb_name;//刪除索引
索引創建的基本法則,基於搜索鍵來創建索引,SELECT 的WHERE 子句的查詢條件中的字段。
索引使用策略
1、要使用獨立的列,索引列不是表達式的一部分
SELECT name FROM students WHERE Age> 20;
2、前綴索引
索引選擇性:單獨索引項與數據記錄的總數的比值,索引選擇性越高查詢效率就越高反之則就越低。
3、多列索引
查詢條件,如果要用AND連接儘可能使用組合索引,如果是ALL則儘可能使用多個簡單索引。
4、合適的次序,將選擇性最高的列寫在最左側。
5、聚簇索引:
優點: 數據訪問塊
缺點: 跟新侷促索引的代價很高
6、覆蓋索引