廈門app網(wǎng)站建設(shè)平臺推廣是什么工作
目錄
sql語句
DDL——數(shù)據(jù)庫定義語言(定義庫,表,字段)
數(shù)據(jù)庫操作:
表操作:
DML
增刪改語句
DQL
語法編寫順序:
條件查詢
DCL
用戶管理:
權(quán)限管理:
函數(shù)
常見字符串內(nèi)置函數(shù)
常見數(shù)值內(nèi)置函數(shù)
常見日期內(nèi)置函數(shù)
常見流程內(nèi)置函數(shù)
約束
外鍵約束
多表查詢
連接查詢:
內(nèi)連接:相當(dāng)于查詢A,B交集部分?jǐn)?shù)據(jù)
外連接:
自連接:
聯(lián)合查詢:
子查詢:
標(biāo)量子查詢(子查詢結(jié)果為單個(gè)值)
列子查詢(子查詢結(jié)果為一列)
行子查詢(子查詢結(jié)果為一行)
表子查詢(子查詢結(jié)果為多行多列)
事務(wù)
概念:
操作:
事務(wù)四大特性ACID:
并發(fā)事務(wù)問題:
事物的隔離級別:
隔離操作
部分圖片截取自【黑馬程序員 MySQL數(shù)據(jù)庫入門到精通,從mysql安裝到mysql高級、mysql優(yōu)化全囊括】https://www.bilibili.com/video/BV1Kr4y1i7ru?p=62&vd_source=4aa5c9ca48e929b37821b89859f00208
僅供學(xué)習(xí)使用,感謝!
sql語句
DDL——數(shù)據(jù)庫定義語言(定義庫,表,字段)
數(shù)據(jù)庫操作:
查詢:
查詢所有數(shù)據(jù)庫
Show?? databases;
查詢當(dāng)前數(shù)據(jù)庫
Select?? database();
創(chuàng)建:
Create database [if? not exists]? 數(shù)據(jù)庫名? [default charset 字符集]? [collate 排序規(guī)則]
刪除
Drop database [if exists]? 數(shù)據(jù)庫名;
使用
Use? 數(shù)據(jù)庫名;
表操作:
查詢
查詢當(dāng)前數(shù)據(jù)庫中所有表
Show? tables;
查詢表結(jié)構(gòu)
Desc? 表名;
查詢指定表的建表語句
Show create? table? 表名;
修改
添加字段
Alter table? 表名? add? 字段名 類型 [comment? 注釋]? [約束];
修改數(shù)據(jù)類型
Alter? table? 表名? modify? 字段名? 新數(shù)據(jù)類型;
修改字段名和字段類型
Alter?? table?? 表名?? change? 舊字段? 新字段 類型(長度)[約束] ;
修改表名
Alter?? table?? 表名? rename to? 新表名;
刪除
刪除表
Drop? table [if? exists]? 表名;
清空表
Truncate??? table?? 表名;
DML
增刪改語句
添加數(shù)據(jù)
Insert? into? 表名([字段名1[,字段名2,…]]) values? (值1,值2,…) [, (值1,值2,…)];
修改數(shù)據(jù)
Update? 表名? set?? 字段名1=值1,字段名2=值2,….[where 條件];
刪除數(shù)據(jù)
Delete?? from?? 表名? [where? 條件]
注意:當(dāng)添加一個(gè)字段,需要給原先的列中添加該字段的值時(shí),需要用update設(shè)置這個(gè)值,而不是用insert插入這個(gè)值,
? insert插入的是整體字段的值,而不能插入單獨(dú)一個(gè)字段的值。
DQL
語法編寫順序:
?? Select?? [distinct]? 字段1[as? 別名] ,[字段2,….]
?? from? 表名列表
?? [where? 條件列表]?
?? [group?? by??? 分組字段列表]???
?? [having?? 分組后條件列表]? (group? by分組之后的條件過濾用having)
?? [order by?? 字段1 排序方式1,字段2 排序方式2]?? (排序方式ASC升序默認(rèn)值,DESC降序:注意多字段排序,當(dāng)?shù)谝粋€(gè)字段值相同時(shí)才會根據(jù)第二個(gè)字段進(jìn)行排序)
? ?[?? limit? 起始索引,查詢記錄數(shù)] ???(起始索引從零開始,起始索引=(查詢頁碼-1)*每頁顯示記錄數(shù))
條件查詢
注意:“l(fā)ink 占位符 ”中“_”的個(gè)數(shù)表示匹配的具體個(gè)數(shù),“%”表示匹配到任意多個(gè);
?? ??多字段排序,當(dāng)?shù)谝粋€(gè)字段值相同時(shí)才會根據(jù)第二個(gè)字段進(jìn)行排序;
??? IN中的元素需要用“,”進(jìn)行隔離;
DCL
用戶管理:
查詢用戶
Use?? mysql;
Select? *?? from??? user;
創(chuàng)建用戶
Create?? user?? ‘用戶名’@‘主機(jī)名’ identified? by ‘密碼’;
修改用戶密碼
Alter??? user? ‘用戶名’@‘主機(jī)名’ identified? with?? mysql_native_password? by? '新密碼';
刪除用戶
Drop?? user? ‘用戶名’@‘主機(jī)名;
注意:主機(jī)名可以使用%通配。
權(quán)限管理:
創(chuàng)建權(quán)限:
①,查詢權(quán)限
? show? grants? for?? ‘用戶名’@‘主機(jī)名’;
②,授予權(quán)限
? grant?? 權(quán)限列表? on? 數(shù)據(jù)庫名.表名?? to?? ‘用戶名’@‘主機(jī)名’;
③,撤銷權(quán)限
?revoke?? 權(quán)限列表? on?? 數(shù)據(jù)庫名.表名?? from?? ‘用戶名’@‘主機(jī)名’;
函數(shù)
常見字符串內(nèi)置函數(shù)
注意:mysql的start位置最小為1
常見數(shù)值內(nèi)置函數(shù)
案例:隨機(jī)生成六位驗(yàn)證碼
SELECT ROUND(RAND()*1000000);
常見日期內(nèi)置函數(shù)
常見流程內(nèi)置函數(shù)
案例:
約束
補(bǔ)充:mysql中的主鍵自增:auto-increment?
?
注意:約束是作用于表中的字段上的,可以在創(chuàng)建表/修改表的時(shí)候添加約束。
? 如果定義not null一定要給定義默認(rèn)值,放置嚴(yán)格模式無法正常插入
?
外鍵約束
外鍵的作用:外鍵是用來讓表與表之間建立連接,從而保證數(shù)據(jù)的一致性和完整性。
添加外鍵
Create table 表名(
字段名?? 數(shù)據(jù)類型,
,,,
[constraint]? [外鍵名稱]? foreign?? key(外鍵字段名) references? 主表(主表列名)
);
Alter table 表名 add? constraint??? 外鍵名稱? foreign? key(外鍵字段名)? references 主表(主表列名);
刪除外鍵
Alter?? table?? 表名 ?drop? foreign? key? 外鍵名稱;
刪除或更新行為
Alter table 表名? add? constraint??? 自定義外鍵名稱? foreign? key(外鍵字段名)? references 主表(主表列名)on update 行為 on delete 行為;
常用行為:級 聯(lián)cascade??? 刪除后值設(shè)置為空set null;
多表查詢
多表查詢分類:
注意·:關(guān)聯(lián)匹配條件是到笛卡爾積里面篩選的條件
連接查詢:
內(nèi)連接:相當(dāng)于查詢A,B交集部分?jǐn)?shù)據(jù)
隱式內(nèi)連接:select? 字段列表? from? 表1,表2 where 關(guān)聯(lián)匹配條件;
顯示內(nèi)連接:select? 字段列表? from? 表1? [inner] join? 表2 on 關(guān)聯(lián)匹配條件;(推薦使用)
外連接:
左外連接:查詢左表所有數(shù)據(jù),以及兩張表交集部分?jǐn)?shù)據(jù)
右外連接:查詢右表所有數(shù)據(jù),以及兩張表交集部分?jǐn)?shù)據(jù)
Select? 字段列表? from? 表1? left/right? [outer]? join? 表2? on?? 關(guān)聯(lián)匹配條件;
自連接:
????????當(dāng)前表與自身的鏈接查詢,子鏈接必須使用表別名
聯(lián)合查詢:
union,union all
對于union查詢,就是把多次查詢的結(jié)果合并起來,形成一個(gè)新的查詢結(jié)果
Select??? 字段列表?? from? 表A…….
Union
Select? 字段列表? from 表B…..? ;
注意:對于查詢多張表的列數(shù)必須保持一致,字段類型也需要保持一致;
? Union? all會將全部的數(shù)據(jù)直接合并在一起,union會對合并之后的數(shù)據(jù)去重;
子查詢:
概念:SQL語句中嵌套select語句,稱為嵌套查詢,又稱子查詢。
語法:select?? 字段列表? from?? 表??? where? 字段名=(select? 字段列表?? from? 表……..);
子查詢外部的語句可以是insert/update/delete/select中的任意一個(gè)。
根據(jù)子查詢結(jié)果不同,分為:
標(biāo)量子查詢(子查詢結(jié)果為單個(gè)值)
列子查詢(子查詢結(jié)果為一列)
行子查詢(子查詢結(jié)果為一行)
常用操作符:=,<>,IN,NOT IN
表子查詢(子查詢結(jié)果為多行多列)
根據(jù)子查詢位置:分為:where之后,from之后,select之后。
事務(wù)
概念:
事務(wù)是一組操作的集合,它是一個(gè)不可分割的工作單位,事務(wù)會把所有的操作作為一個(gè)整體一起向系統(tǒng)提交或撤銷操作請求,及這些操作要么同時(shí)成功,要么同時(shí)失敗。
(例如銀行轉(zhuǎn)賬要么成功要么失敗)
默認(rèn)mysql的事務(wù)是自動提交的,也就是說,當(dāng)執(zhí)行一條dml語句,mysql會立即隱式的提交事務(wù)。
操作:
查看/設(shè)置事務(wù)提交方式:(1為自動提交,0為手動提交)
Select? @@autocommit;
Set?? @@autocommit=0;
開啟事務(wù)(不用更改事務(wù)提交方式):
Start? transaction? 或? begin;
提交事務(wù):
commit;
回滾事務(wù):
rollback;
注意:開啟事務(wù)或者設(shè)置為手動提交時(shí)rollback才生效;
?
事務(wù)四大特性ACID:
原子性:事務(wù)是不可分割的最小操作單元,要么全部成功,要么全部失敗。
一致性:事務(wù)完成時(shí),必須使所有的數(shù)據(jù)都保持一致狀態(tài),
隔離性:數(shù)據(jù)庫系統(tǒng)提供的隔離機(jī)制,保證事務(wù)在不受外部并發(fā)操作影響的獨(dú)立環(huán)境下運(yùn)行。
持久性:事務(wù)一旦提交或回滾,它對數(shù)據(jù)庫中的數(shù)據(jù)的改變是永久的。
并發(fā)事務(wù)問題:
事物的隔離級別:
注意:“×”是可以解決相關(guān)問題,“√”反之無法解決。 repeatable read(可重復(fù)讀),serializable(串行)。
隔離操作
查看事務(wù)隔離級別???????? select? @@transaction_isolation;
設(shè)置事務(wù)隔離??????????????? set? [session|global]? transaction? isolation? level? [read? uncommitted | read committed | repeatable read(默認(rèn))? | serializable];
注意:事務(wù)隔離級別越高,數(shù)據(jù)越安全,但是性能越低。
?
Read? commited?? :解決了臟讀問題,當(dāng)一方提交了,另一方才會查詢得到。(一方提交);
Repeatable? read??? :解決了不可重復(fù)讀問題,當(dāng)一方提交了,另一方查詢不到,只有另一方自身也提交了才會查詢得到(需要雙方都提交);
Serializable?? :串行操作,一方執(zhí)行完,另一方才可以執(zhí)行;
?
?