Mysql 筆記之基礎知識

                                       Mysql 筆記之基礎知識

Mysql中的字符的大小寫

        1、SQL關鍵字和內置函數名不區分大小寫,比如SELECT,可寫成select要遵循一種風格。

        2、數據庫、表、索引及視圖的名稱是是否區分大小寫取決於低層的osFS

        3、存儲過程,存儲函數及事件調度器不區分字符大小寫,但觸發器區分大小寫;

        4、表名不區分大小寫

        5、字段中字符數據,類型binaryblogvarbinary區分大小寫

        >CREATE DATABASE IF NOT EXISTS tb_test;

        >SHOW GLOBAL VARIABLES LIKE ‘%char%’;

       mysql客戶端與服務器端

CHARACTER SET [=] charset

DDLCREATE/ALTER/DROP

數據字典就是存取數據元數據的數據集,

DROP DATABASE IF EXISTS db_name

表的創建

         約束有主鍵、唯一鍵、外鍵(約束)

         索引:特殊的數據結構,用於快速找到數據記錄,鍵可用做索引(是一種特殊的索引),但並非所有索引都是鍵。

 索引類型:B-Tree索引,(B+ TreeB- 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、覆蓋索引

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章