MySQL 簡潔速查手冊

MySQL 速查手冊

0. 前言

  • 此篇文章的由來是因爲我學完MySQL後,發現東西有點多,而實戰中真正需要我寫的就是基本CRUD語句,所以我決定將學過的記錄一下,便於複習。
  • 最近我的一位朋友,他有一個比賽需要用到MYSQL,正好我之前我有整理,在這裏分享一下。
  • 此文適合學過MySQL的同學閱讀,沒學過的同學也可以作爲參考。

1. 開啓/關閉數據庫

開啓關閉服務

  1. 手動開啓本地服務
  2. 命令行開啓
    net  start  mysql
    net  stop  mysql
    

客戶端連接

mysql [-h主機名] [-P端口號] -u用戶名 -p密碼

2. 數據庫操作

查看所有數據庫

show databases;

創建數據庫

create database 數據庫名 [charset 字符集] [collate 校對規則];

查看數據庫創建語句

show create database 數據庫名;

刪除數據庫

drop database 數據庫名;

修改數據庫

alter database 數據庫名 charset 字符集 [collate 校對規則];

使用數據庫

use 數據庫名;

3. 數據表操作

創建數據表

create table 表名(
	字段1,
	字段2...
)[charset 字符集] [engine 表類型];

查看所有數據表

show tables;

查看數據表結構

desc 表名;

查看錶創建語句

show create table 表名;

刪除數據表

drop table 表名;

修改表名

alter table 表名 rename 新表名;

修改表字符集

alter table 表名 charset 字符集;

4. 字段操作

添加字段

alter table 表名 add 字段名 字段類型 [字段屬性] [after 某字段名 或 first];

修改字段

alter table 表名 change 舊字段名 新字段名 字段類型 [字段屬性...];
-- 不修改字段名且只修改其它信息,則可以使用:
alter table 表名 modify 字段名 字段類型 [字段屬性...];

刪除字段

alter table 表名 drop 字段名;

5. 數據操作

插入數據

insert into 表名(字段名1,字段名2, ... ) values(數據1, 數據2, ...);
-- 簡寫:
insert into 表名 values(數據1, 數據2, ...);

查詢數據

select * from 表名;

刪除數據

delete from 表名 [where];

修改數據

update 表名 set 字段名 = 值 [where];

6. 運算符

distinct(消除重複行)

select distinct 字段 from 表名;

like(模糊查詢運算符)

-- 查詢“吳”字開頭,後面無所謂。
字段 like '吳%';
-- 查詢“李”字開頭,後面佔兩個字符
字段 like '吳__';

between and(範圍限定符)

between 起始範圍 and 結束範圍;

in(包含運算符)

in(數據1, 數據2...);

is(判空運算符)

  • 用於判斷一個字段中的是“是否存在”(即有沒有),只有兩個寫法
where 字段 is not null;
where 字段 is null;

7. 高級查詢(group by、having、order by、limit)

group by子句

  • 含義:
    表示對所取得的數據,以所給定的字段來進行分組。
    最後的結果就是將數據分成了若干組,每組作爲一個“整體”成爲一行數據。
  • 特別注意:
    分組之後,只有“組信息” ,一行就是一組
  • group by了之後通常只有兩種情況:
    1. 分組本身的字段信息.
    2. 一組的綜合統計信息.
group by 字段1, 字段2...

having子句

  • 含義:having其實是相當於分組之後“有若干行數據”,然後對這些行再篩選。
having 篩選條件;

order by子句

  • 含義:對數據進行排序,asc(正序), desc(倒序)
order by 字段 [asc 或 desc];

limit子句

  • 含義:某行開始取多少行數據。用於分頁查詢。
limit  起始行號,行數;
  • MySQL5另一種寫法
  limit  行數 offset 起始行號;

8. 高級插入

同時插入

insert into 表名 (字段1, 字段2...) values
(數據1, 數據2...), ... 
(數據1, 數據2...);

set插入

insert into 表名 set 字段1 = 值, 字段2 = 值 ... ;

蠕蟲複製

  • 含義:用於壓力測試。
-- 將查詢的結果插入到指定表中
insert into 表名1 (字段1, 字段2...) select 字段1, 字段2... from 表名2;
-- 蠕蟲複製,也就是查詢本身,然後再將數據插入到本身。
insert into 表名 select * from 表名;

主鍵衝突

  • 方案1: 忽略; 終止插入,數據不變;
insert ignore into 表名 values (數據1, 數據2...);
  • 方案2: 替換; 刪除原紀錄,插入新紀錄;
replace into 表名 values (數據1, 數據2...);
  • 方案3: 更新; 更新原有的數據
insert into 表名 values (數據1, 數據2...)
	on duplicate key update XX字段=新的值 ... ;

9. 高級刪除

按指定順序刪除指定數量的數據

delete from 表名 where ... [order  by 字段名, ...] [limit 數量n];

truncate清空

  • 含義:表示清空指定表中的所有數據並將表恢復到“初始狀態”(就類似剛剛創建一樣)
  • 對比“delete from 表名”,這個不會恢復“初始狀態”。
truncate 表名;

10. 高級更新

update 表名 set 字段名1 = 字段值1 ... 
	where ... [order by 字段名, ...] [limit 數量n];

11. 聯合查詢

  • 含義:聯合查詢是指將2個或2個以上的字段數量相同的查詢結果,“縱向堆疊”後合併爲一個結果。
select查詢1
union [all或distinct]
select查詢2
union [all或distinct]
select查詢3
... 
[order by 字段 [asc或desc] ]
[limit 起始行號,數量];
  • 注意:
    1. 查詢表的字段的列數需要一致(名字可以不同)。
    2. 查詢表的字段類需要一致。
    3. 最後的查詢結果的列名是第一張表的列名。
    4. order by 和 limit 是對聯合之後的結果進行排序和數量限定的。
    5. order by 排序的字段應該要使用第一張表的列名。

12. 連接查詢

  • 連接(join)查詢是將兩個查詢的結果以“橫向對接”的方式合併起來的結果。

笛卡爾積

from 表1 [cross] join 表2;
  • 還有一種寫法:from 表1, 表2;

內連接

from 表1 [inner] join 表2 on 連接條件;

外連接

12.1 左外連接
from 表1 left [outer] join 表2 on 連接條件
  • 特點與注意:
    1. 左外連接其實是保證左邊表的數據都能夠取出的一種連接。
    2. 左外連接其實是在內連接的基礎上,再加上左邊表中所有不能滿足條件的數據
    3. 關鍵字“outer”可以省略。
12.2 右外連接
from 表1 right [outer] join 表2 on 連接條件
  • 特點與注意:
    1. 右外連接其實是保證右邊表的數據都能夠取出的一種連接。
    2. 右外連接其實是在內連接的基礎上,再加上右邊表中所有不能滿足條件的數據。
    3. 關鍵字“outer”可以省略。

自連接

  • 含義:自連接不是一種新的連接,只是一個表“自己跟自己連接”。
from 表1 as a [連接形式] join 表1 as b on a.字段1 = b.字段2;
  • 特點與注意:
    1. 自連接其實還是兩個表連接,只是將一個表用不同的別名,當做兩個表。
    2. 自連接適用於一個表中的某個字段的值“來源於”當前表的另一個字段的情況。

13. 子查詢

  • 含義:子查詢就是指一個“正常查詢語句”中的某個部分(比如select部分,from部分, where部分)又出現了查詢的一種查詢形式
  • 此時,子查詢所在上“上層查詢”,就被稱爲主查詢。

標量子查詢

  • 含義:標量子查詢就是指子查詢的結果是“單個值”(一行一列)的查詢。

列子查詢

  • 含義:列子查詢查出的結果爲“一列數據”
  • 通常用來代替in運算符

行子查詢

  • 含義:行子查詢查出的結果通常是一行
  • 使用:
    行子查詢的結果通常跟“行構造符”一起,在where條件子句中做爲條件數據,類似這樣:
where  [row](字段1,  字段2 )  = (行子查詢);

表子查詢

  • 含義:
    當一個子查詢查出的結果是“多行多列”的時候,就是表子查詢。
    表子查詢的結果相當於一個表,可以直接當做一個表來使用。
  • 使用:
    表子查詢通常用在主查詢的from子句中,作爲一個“數據源”。
  • 注意:
    需要給該子查詢設置一個別名,類似這樣:
    from (select … 子查詢 ) as tab1

exists子查詢

  • 含義:
    該子查詢如果“有數據”, 則該exists()的結果爲“true”, 即相當於 where true (恆真)
    該子查詢如果“沒有數據”,則該exists()的結果爲“false”,即相當於where false(恆假)
where exists(任何子查詢);
  • 特點與注意:
    1. 此子查詢語句通常需要用到主查詢語句中的字段作爲查詢條件。
    2. 有意義exists子查詢不能單獨執行
    3. 之前的4種子查詢都可以單獨執行

13.1 有關子查詢的特定關鍵字

any關鍵字

  • 包含任意一個

all關鍵字

  • 全部包含
還有視圖、事務、變量、存儲過程等內容,後面看情況補上...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章