Mysql高級用法

Mysql數據庫的高級用法

  • 內連接(INNER JOIN)

一、等值連接
概述:指使用等號"="比較兩個表的連接列的值,相當於兩表執行笛卡爾後,取兩表連結列值相等的記錄。

語法:
SELECT 列
FROM 表1 INNER JOIN 表2
ON 表1.列 = 表2.列
二、非等值連接

概述:指使用大於號">“或小於號”<"比較兩個表的連接列的值,相當於兩表執行笛卡爾後,取一個表大於或小於另一個表的連結列值的記錄。

語法:

SELECT 列
FROM 表1 INNER JOIN 表2
ON 表1.列 <> 表2.列

  • 左外連接(LEFT OUTER JOIN)
    在這裏插入圖片描述

  • 右外連接(RIGHT OUTER JOIN)
    在這裏插入圖片描述

  • 左外連接就是A和B的交集再並上A的所有數據
    右外連接就是A和B的交集再並上B的所有數據
    總之, 哪個表的數據重要, 就把哪個表放前邊使用左連接就好了(反正我是這樣用的 ^ _ ^ )

索引

使用索引的優缺點:

  • 優點:

    1、 所有的MySql列類型(字段類型)都可以被索引,也就是可以給任意字段設置索引

    2、大大加快數據的查詢速度

  • 缺點

    1、 創建索引和維護索引要耗費時間,並且隨着數據量的增加所耗費的時間也會增加

    2、索引也需要佔空間,我們知道數據表中的數據也會有最大上線設置的,如果我們有大量的索引,索引文件可能會比數據文件更快達到上線值

    3、 當對錶中的數據進行增加、刪除、修改時,索引也需要動態的維護,降低了數據的維護速度

  • 使用場景
    並不是每個字段度設置索引就好,也不是索引越多越好,而是需要自己合理的使用。

    1、對經常更新的表要避免對其進行過多的索引,對經常用於查詢的字段應該創建索引

    2、 數據量小的表最好不要使用索引,因爲由於數據較少,可能查詢全部數據花費的時間比遍歷索引的時間還要短,索引就可能不會產生優化效果

    3、 在一同值少的列上(字段上)不要建立索引,比如在學生表的"性別"字段上只有男,女兩個不同值。相反的,在一個字段上不同值較多可是建立索引
    索引的分類

注意:索引是在存儲引擎中實現的,也就是說不同的存儲引擎,會使用不同的索引

MyISAM和InnoDB存儲引擎:只支持BTREE索引, 也就是說默認使用BTREE,不能夠更換

MEMORY/HEAP存儲引擎:支持HASH和BTREE索引

1、索引我們分爲四類:單列索引(普通索引,唯一索引,主鍵索引)、組合索引、全文索引、空間索引、

(1)單列索引:一個索引只包含單個列,但一個表中可以有多個單列索引

普通索引:MySQL中基本索引類型,沒有什麼限制,允許在定義索引的列中插入重複值和空值,純粹爲了查詢數據更快一點。

唯一索引:索引列中的值必須是唯一的,但是允許爲空值

主鍵索引:是一種特殊的唯一索引,不允許有空值

(2)組合索引:

在表中的多個字段組合上創建的索引,只有在查詢條件中使用了這些字段的左邊字段時,索引纔會被使用,使用組合索引時遵循最左前綴集合

(3)全文索引:全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT類型字段上使用全文索引

什麼是全文索引:就是在一堆文字中,通過其中的某個關鍵字等,就能找到該字段所屬的記錄行,比如有"你是個大煞筆,二貨 …" 通過大煞筆,可能就可以找到該條記錄。這裏說的是可能,因爲全文索引的使用涉及了很多細節

(4)空間索引:空間索引是對空間數據類型的字段建立的索引

MySQL中的空間數據類型有四種,GEOMETRY、POINT、LINESTRING、POLYGON。

在創建空間索引時,使用SPATIAL關鍵字。

要求:引擎爲MyISAM,創建空間索引的列,必須將其聲明爲NOT NULL

四、索引的操作(創建)

  • 創建表的時候創建索引:
    格式:CREATE TABLE 表名[字段名 數據類型] [UNIQUE|FULLTEXT|SPATIAL|…] [INDEX|KEY] [索引名字] (字段名[length]) [ASC|DESC]

  • 在已創建的表上添加索引

    ALTER TABLE 表名 ADD[UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [索引名] (索引字段名)[ASC|DESC]

    1、爲表添加索引

      ALTER TABLE book ADD INDEX BkNameIdx(bookname(30));
    

    2、使用CREATE INDEX創建索引

      CREATE INDEX BkBookNameIdx ON book(bookname);
    
  • 索引操作(刪除)

    格式一:ALTER TABLE 表名 DROP INDEX 索引名

    格式二:DROP INDEX 索引名 ON 表名;

查看索引的詳細信息: explain select * from book where bookid=1\G;

對某列設置默認值:
alter table tableName alter column sightml set default 1;
刪除列
alter table tableName drop column 列名;
添加列
ALTER TABLE book ADD(列名 VARCHAR (20));

聚合函數不可以用在條件中
單行單列:可以使用=,>,<,>=,<=,!=
多行單列(集合)可以用All ,ANY ,IN ,not IN

  • SQL 分組
    1、GroupBY 和 Group_concat
    eg:select 列1, GROUP_CONCAT(列名) from employee GROUP BY 列1
    having 和 where 的區別:
    2、GroupBY 和 Group_concat和Having 或 where
    having 是在分組後對數據進行過濾,where 是在分組前對數據進行過濾
    having後面可以使用分組函數(統計函數),where後面不可以使用分組函數
    where 是對分組前記錄的條件,如果某行記錄沒有滿足where字句的條件,那麼這行記錄不會參加分組;而having是對分組後數據的約束

參考:https://www.cnblogs.com/friday69/p/9389720.html

在這裏插入圖片描述

修改mysql命令行的亂碼:set character_set_results=gb2312;

發佈了22 篇原創文章 · 獲贊 6 · 訪問量 673
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章