MySQL 速查手冊
0. 前言
- 此篇文章的由來是因爲我學完MySQL後,發現東西有點多,而實戰中真正需要我寫的就是基本CRUD語句,所以我決定將學過的記錄一下,便於複習。
- 最近我的一位朋友,他有一個比賽需要用到MYSQL,正好我之前我有整理,在這裏分享一下。
- 此文適合學過MySQL的同學閱讀,沒學過的同學也可以作爲參考。
1. 開啓/關閉數據庫
開啓關閉服務
- 手動開啓本地服務
- 命令行開啓
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了之後通常只有兩種情況:
- 分組本身的字段信息.
- 一組的綜合統計信息.
group by 字段1, 字段2...
having子句
- 含義:having其實是相當於分組之後“有若干行數據”,然後對這些行再篩選。
having 篩選條件;
order by子句
- 含義:對數據進行排序,asc(正序), desc(倒序)
order by 字段 [asc 或 desc];
limit子句
limit 起始行號,行數;
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 表名;
主鍵衝突
insert ignore into 表名 values (數據1, 數據2...);
replace into 表名 values (數據1, 數據2...);
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 起始行號,數量];
- 注意:
- 查詢表的字段的列數需要一致(名字可以不同)。
- 查詢表的字段類需要一致。
- 最後的查詢結果的列名是第一張表的列名。
- order by 和 limit 是對聯合之後的結果進行排序和數量限定的。
- order by 排序的字段應該要使用第一張表的列名。
12. 連接查詢
- 連接(join)查詢是將兩個查詢的結果以“橫向對接”的方式合併起來的結果。
笛卡爾積
from 表1 [cross] join 表2;
內連接
from 表1 [inner] join 表2 on 連接條件;
外連接
12.1 左外連接
from 表1 left [outer] join 表2 on 連接條件
- 特點與注意:
- 左外連接其實是保證左邊表的數據都能夠取出的一種連接。
- 左外連接其實是在內連接的基礎上,再加上左邊表中所有不能滿足條件的數據
- 關鍵字“outer”可以省略。
12.2 右外連接
from 表1 right [outer] join 表2 on 連接條件
- 特點與注意:
- 右外連接其實是保證右邊表的數據都能夠取出的一種連接。
- 右外連接其實是在內連接的基礎上,再加上右邊表中所有不能滿足條件的數據。
- 關鍵字“outer”可以省略。
自連接
- 含義:自連接不是一種新的連接,只是一個表“自己跟自己連接”。
from 表1 as a [連接形式] join 表1 as b on a.字段1 = b.字段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(任何子查詢);
- 特點與注意:
- 此子查詢語句通常需要用到主查詢語句中的字段作爲查詢條件。
- 有意義exists子查詢不能單獨執行
- 之前的4種子查詢都可以單獨執行
13.1 有關子查詢的特定關鍵字
any關鍵字
all關鍵字
還有視圖、事務、變量、存儲過程等內容,後面看情況補上...