DQL 數(shù)據(jù)查詢語(yǔ)言 select
DML 數(shù)據(jù)操作語(yǔ)言 insert delete update
DDL 數(shù)據(jù)定義語(yǔ)言 create drop alter
DCL 數(shù)據(jù)控制語(yǔ)言 grant revoke
net start mysql80
win開啟mysql進(jìn)程
net stop mysql80
win關(guān)閉mysql進(jìn)程
MySQL -uroot -p<password>
登錄MySQL
create database <dbname>
創(chuàng)建名字為dbname的數(shù)據(jù)庫(kù)
show databases;
查看MySQL里面有幾個(gè)數(shù)據(jù)庫(kù)饮醇,默認(rèn)自帶四個(gè)
use <dbname>
使用dbname數(shù)據(jù)庫(kù)
show tables
查看當(dāng)前庫(kù)所有表名
desc <tableName>
查看表結(jié)構(gòu)
- DQL
select * form <tableName>
對(duì)tableName進(jìn)行全表查詢
select <field1>, <field2>... from <tableName>
從tableName表查詢field1,filed2...
使用as取別名酸役,但是不改變表filed名。(as可以省略勒庄,別名不能有空格顶吮,有空格可以用單引號(hào))
select <field> as <myfield> for <tableName>
講查詢結(jié)果field->myfield
查詢計(jì)算
select <field>*<n> as <myfiled> form <tableName>
將filed查詢結(jié)果乘n并且改為myfiled
條件查詢 where
**= 等于
<> 或者 !+ 不等于
<= 大于等于 >= 小于等于 > 大于 < 小于
between ... and ... 等價(jià)于 >= and <= (左小右大)
and 并且邏輯(優(yōu)先級(jí)高于or, 可以()來(lái)提高or優(yōu)先級(jí))
or 或者邏輯
in (<v1>, <v2>,<v3>...)
在里面就為true
not in (<v1>,<v2>...)
模糊查詢%(任意多個(gè)) _(任意一個(gè))可以用\轉(zhuǎn)義
排序 order by (默認(rèn)升序) order by <field1>,<field2> desc
按field1降序,如果相等再比f(wàn)ield2
order by <n>
按查詢結(jié)果的第n列排序
語(yǔ)句執(zhí)行順序:select ... from ... where ... order by ... : from->where->select->order by
分組查詢(group by可以多個(gè)字段聯(lián)合分組):select <field> from <table> where <condition> group by <field> order by <field>
:執(zhí)行順序from-where-group by-select-order by
having:可以對(duì)分組之后的數(shù)據(jù)進(jìn)一步過(guò)濾,效率比較低,盡量使用where過(guò)濾
注意:在分組查詢里面select<field>里面的field只能是分組字段和分組函數(shù),不然沒(méi)有意義克锣。
注意:null的判斷要用is 或者is not
連接查詢
- 內(nèi)連接
select <>,<> from <> inner join <> on <> where <>
- 等值連接 on條件為等值
- 非等值連接 on條件為非等值
- 自聯(lián)接 一張表取多次別名(看成多張表)
- 外連接
select <>,<> from
- 左外連接 左邊的數(shù)據(jù)全部查詢出來(lái)
- 右外連接 右邊的數(shù)據(jù)全部查詢出來(lái)
- 全連接
子查詢:就是select或where或from語(yǔ)句里面嵌套select語(yǔ)句嵌套
- DDL
建表:create table <tableName> (<field1> <type> <opt>,<field2> <type> <opt>, ...);
刪表:drop table <tableName>
(刪除的表不存在會(huì)報(bào)錯(cuò)), drop table if exists <tableName>
(避免報(bào)錯(cuò))
增加數(shù)據(jù)insert into:insert into <tableName> (<field1>,<field2> ...) values <v1>,<v2> ...
更新數(shù)據(jù):update <tableName> set <field1>=<v1>,<field2>=<v2> ... where <condition>
注意:沒(méi)有條件會(huì)全部更新
刪除數(shù)據(jù)(DML)
delete delete from<tableName> where <condition>
注意:沒(méi)有條件會(huì)刪除所有的數(shù)據(jù),可以回滾腔长,效率低
truncate(DDL) truncate table <tableName>
刪除不可以回滾, 效率高
- 對(duì)表結(jié)構(gòu)的修改(alter)(DDL)(幾乎不用验残,成本高):
-
約束:建表時(shí)可以對(duì)字段進(jìn)行約束
- 非空約束 not null
- 主鍵約束 primary key捞附,auto_incremen自增
- 唯一約束 unique
- 外鍵約束 foreign key
foreign key <fkName> references <tbName>(<field>)
外鍵fkName引用表tbName的field字段
-
存儲(chǔ)引擎(engine):不同的存儲(chǔ)引擎,MySQL的存儲(chǔ)數(shù)據(jù)的方式不一樣
- InnoDB(默認(rèn)):數(shù)據(jù)有兩個(gè)文件(*.frm;*.DB)支持事務(wù)您没,行鎖鸟召,MVCC
- MyISAM:數(shù)據(jù)有三個(gè)文件(.frm;.MYD;*.MYI);可壓縮氨鹏,
- memory:數(shù)據(jù)存儲(chǔ)在內(nèi)存欧募,反應(yīng)速度快,但易丟失
- 事務(wù):MySQL的最小執(zhí)行單元仆抵,要么全部成功跟继,要么全部失敗种冬。(默認(rèn)提交,即沒(méi)執(zhí)行一條就提交事務(wù))
開啟事務(wù):start transaction
提交事務(wù):commit
回滾事務(wù):rollback
事務(wù)的特性(ACID):
- 原子性(A):最小執(zhí)行單元不可再分.
- 一致性(C):一個(gè)事務(wù)里面的操作同時(shí)成功或失敗舔糖。
- 隔離性(I):事務(wù)之間互不影響娱两。
- 持久性(D):事務(wù)提交之后會(huì)落盤。
-
事務(wù)隔離級(jí)別:
- 讀未提交(read uncommitted):隔離級(jí)別最低金吗,存在臟讀十兢。
- 讀已提交(read committed):解決了臟讀現(xiàn)象油坝,但是不滿足重復(fù)讀取要求的業(yè)務(wù)前硫。
- 可重復(fù)讀(repeat able):MySQL默認(rèn)級(jí)別钱雷,只要事務(wù)不提交隆箩,讀取的數(shù)據(jù)都不變坤学,但是存在幻讀(其他事務(wù)insert導(dǎo)致)扣唱。
- 串行化(serializable):事務(wù)順序執(zhí)行茄厘,隔離級(jí)別最高冤灾,效率太低了玛臂。
設(shè)置MySQL隔離級(jí)別:set global transaction isolation level <isolationLevel>
查看當(dāng)前的隔離級(jí)別:select @@tx_isolation
- 索引(index):為了提高效率烤蜕,避免全表掃描的一種機(jī)制,有哈希索引迹冤,B樹讽营,B+tree等
創(chuàng)建索引: create index <indexName> on <tableName>(<field>)
給表tableName的field字段加索引。
刪除索引: drop index <indexName> on <tableName>(<field>)
刪除表tableName的field字段的索引泡徙。
索引失效幾種情況:
- 模糊查詢以%開頭橱鹏。
- where語(yǔ)句中使用or,并且or兩端有一端字段沒(méi)有索引堪藐。
- 復(fù)合索引不滿足最左前綴原則莉兰。
- 索引字段在where子句里面參與了運(yùn)算或者函數(shù)運(yùn)算等。
- 視圖(view):對(duì)創(chuàng)建的視圖進(jìn)行操作(增刪改)會(huì)影響原數(shù)據(jù)(簡(jiǎn)化開發(fā))礁竞。
創(chuàng)建視圖:create view <viewName> as <opt>
用opt(DQL)操作的查詢結(jié)果創(chuàng)建視圖
刪除視圖:drop view <viewName>
- DCL
創(chuàng)建用戶:create user <userName> indentified by <password>
-
數(shù)據(jù)庫(kù)三范式:表的設(shè)計(jì)規(guī)則糖荒,可以減少數(shù)據(jù)冗余。
- 第一范式:有主鍵模捂,字段原子不可再分捶朵。
- 第二范式:滿足第一范式,并且不存在部分依賴狂男。
- 第三范式:滿足第二范式综看,并且不存在傳遞依賴。
-
MySQL常見數(shù)據(jù)類型:
varchar 會(huì)根據(jù)實(shí)際的長(zhǎng)度動(dòng)態(tài)分配內(nèi)存 省空間但是速度慢
char 定長(zhǎng) 不靈活可能浪費(fèi)空間但是分配速度快
int 最長(zhǎng)11位
bigint 長(zhǎng)整型long
float
double
date 短日期 包括 年 月 日 默認(rèn)格式 %Y-%m-%d
datetime 長(zhǎng)日期 包括 年 月 日 時(shí) 分 秒 默認(rèn)格式 %Y-%m%d %h:%i:%s
clob 字符大對(duì)象岖食,可以存儲(chǔ)最大4G的字符串红碑,超過(guò)255字符的都用clob存儲(chǔ)
blob 二進(jìn)制大對(duì)象,存儲(chǔ)圖片泡垃,聲音析珊,視頻等
-
數(shù)據(jù)處理函數(shù)(單行:一個(gè)輸入一個(gè)輸出; 多行:多個(gè)輸入一個(gè)輸出):
單行處理函數(shù):
lower 轉(zhuǎn)小寫
upper 轉(zhuǎn)大寫
substr 取子串 substr(<strName>,<start>,<len>)
截取strName從start(1開始)開始長(zhǎng)度為len
concat 字符串拼接 concat(<str1>,<str2>)
結(jié)果為str1+str2
length 取長(zhǎng)度
trim 去除前后的空白
str_to_date 將varchar字符串轉(zhuǎn)換成日期date
date_format 將日期date轉(zhuǎn)化為varchar字符串
format 數(shù)字格式化
round 四舍五入 round(<num>,<n>)
將num四舍五入保留小數(shù)點(diǎn)后n(可以為負(fù)數(shù))位
rand() 生成隨機(jī)數(shù)
ifnull 可以將null轉(zhuǎn)換為具體值 ifnull(<field>,<value>)
如果field為null則當(dāng)作值value
now() 可以獲取當(dāng)前時(shí)間
多行處理函數(shù)(group by 分組)(默認(rèn)所有為一組):
count 計(jì)數(shù)(忽略null) count(<field>) 統(tǒng)計(jì)field不為null的行數(shù) count(*) 統(tǒng)計(jì)總行數(shù)
sum 求和
avg 求平均
max 求最大值
min 求最小值
注意:分組函數(shù)不能放在where子句里面
-
orther
select version();
查看當(dāng)前MySQL的版本
\c 可以終止sql的輸入
source path
導(dǎo)入path路徑的數(shù)據(jù)
mysqldump <databaseName> <path>
把庫(kù)databaseName導(dǎo)出為sql腳本文件到path目錄下
執(zhí)行順序 from-where-group by-having-select-order by-limit
case when then 語(yǔ)句 case <field> when <v1> then <opt1> when <v2> then <opt2> else <opt3> end
distinct 查詢結(jié)果去重 select distinct <field1>,<field2> from <tableName>
聯(lián)合去重
distinct 只能在所有查詢字段最前面
union:結(jié)果集合并羡鸥。注意:結(jié)果集合并時(shí)兩個(gè)語(yǔ)句的列要相等
limit:將查詢結(jié)果一部分取出來(lái),分頁(yè)查詢 limit<n> 取查詢結(jié)果的前n個(gè) limit <start>,<len> 取start(0開始)開始的n個(gè)
笛卡兒積:表連接查詢是沒(méi)加條件查詢的結(jié)果條數(shù)是所有表的積唾琼。避免:加條件查詢兄春。
create table <tableName> as <opt>
將opt的查詢結(jié)果新建應(yīng)該tableName表
unique約束字段自動(dòng)添加索引