mysql必学十大必会_MYSQL 学习(一)--启蒙篇《MYSQL必知必会》
MYSQL必知必會(huì)
一.?DDL 數(shù)據(jù)定義語言
Data Definition Language 是指CREATE,ALTER和DROP語句。
DDL允許添加/修改/刪除包含數(shù)據(jù)的邏輯結(jié)構(gòu),或允許用戶訪問/維護(hù)數(shù)據(jù)(數(shù)據(jù)庫(kù),表,鍵,視圖......)的邏輯結(jié)構(gòu)。DDL是關(guān)于“元數(shù)據(jù)”的。
Delimiter詳解
Delimiter?指定命令行結(jié)束符。告訴MYSQL命令已經(jīng)結(jié)束,可以執(zhí)行了。MYSQL默認(rèn)的delimiter是分號(hào)”;”,但是,有的情況下,希望輸入完整后,再一次執(zhí)行。這種情況下,首先修改結(jié)束符為自己指定的符號(hào)。比如//或者$$.在最后輸入完成后,輸入指定的命令行結(jié)束符。開始執(zhí)行整個(gè)語句。
(1)?表操作
1.創(chuàng)建表
創(chuàng)建表至少包含兩部分信息。表名稱和列的細(xì)節(jié)信息。
建表語言例子
CREATE TABLE table_name
(
Column1 int not null,
....
PRIMARY_KEY(Column1)
)engine= InnoDB|MyISAM;
建表語言描述
建表語句,CREATE TABLE + 表名稱 然后用小括號(hào)包含字段列表(需要定義主鍵primary_key)。最后是引擎類型。MySQL通常有InnoDB(事務(wù)處理的好)和MyISAM(支持全文檢索)兩種
引擎類型
MySQL具有多種引擎。SQL是在引擎中執(zhí)行的。
InnoDB:可靠的事務(wù)處理引擎,不支持全文檢索。
MyISAM:不支持事務(wù),支持全文檢索
MEMORY:功能和MyISAM類似。數(shù)據(jù)是在內(nèi)存中保存,而不是磁盤。速度快,特別適合臨時(shí)表。
2.修改表
Alter table table_name add column_n data_type;
3.刪除表
Drop table table-name;
4.重命名表
Rename table table-name to table-name2;
(2)?視圖
視圖是虛擬的表,只包含使用時(shí)動(dòng)態(tài)檢索數(shù)據(jù)的查詢。
1.使用視圖的原因
復(fù)用SQL語句
簡(jiǎn)化基于視圖的SQL。
保護(hù)數(shù)據(jù)
因?yàn)橐晥D只能查詢部分字段。使用視圖可以授予指定部分訪問權(quán)限,而不是整個(gè)的訪問權(quán)限。
更改數(shù)據(jù)的格式和表示
可以把數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換之后,提供給用戶。(對(duì)檢索出來的數(shù)據(jù)重新格式化)
2.視圖相關(guān)的語句
創(chuàng)建視圖
Create view view_name AS ---;
刪除視圖
Drop view view_name;
更新視圖
Create or replace view_name?;
視圖的數(shù)據(jù)是可以更新的。意味著可以對(duì)視圖進(jìn)行insert、update和delete操作的。但是視圖如果包含以下情況,將不可以更新。
分組(group by 和having)
關(guān)聯(lián)(任何join)
子查詢
并(union 和union All)
聚集函數(shù)(count()、sum()、avg()、max()、min())
去重distinct
導(dǎo)出(計(jì)算)列
查看創(chuàng)建視圖語句
Show create view view_name;
(3)?存儲(chǔ)過程
1)?使用存儲(chǔ)過程的原因
執(zhí)行速度快
存儲(chǔ)過程只在創(chuàng)建的時(shí)候編譯一次。以后每次執(zhí)行都不用編譯。而SQL語句每次執(zhí)行,都需要編譯一次。所以,存儲(chǔ)過程能提高執(zhí)行效率。
編譯:SQL通常在db接收到執(zhí)行一般有以下幾個(gè)操作。
(1)語法、語義解析。
(2)優(yōu)化SQL語句,制定執(zhí)行計(jì)劃。
(3)執(zhí)行并返回結(jié)構(gòu)。
其中,語法語義解析、優(yōu)化SQL語句、制定執(zhí)行計(jì)劃是編譯的部分。
減少網(wǎng)絡(luò)傳輸
復(fù)雜邏輯需要多條SQL語句,客戶機(jī)和數(shù)據(jù)庫(kù)服務(wù)器之間的操作多時(shí),產(chǎn)生大量的網(wǎng)絡(luò)傳輸。而封裝在一個(gè)存儲(chǔ)過程中,減少網(wǎng)絡(luò)負(fù)載。
更靈活
使用條件判斷和游標(biāo),使用數(shù)據(jù)庫(kù)內(nèi)置函數(shù),有更強(qiáng)的靈活性和復(fù)雜性。
2)?存儲(chǔ)過程的操作語句
創(chuàng)建存儲(chǔ)過程
Create procedure 存儲(chǔ)過程名稱([參數(shù)列表]) begin SQL語句end;
參數(shù)列表格式
[類型限定?變量名?數(shù)據(jù)類型]
類型限定:
(1)IN
限定這個(gè)參數(shù)是傳值給存儲(chǔ)過程的。【in修飾的值,在存儲(chǔ)過程內(nèi)部不會(huì)被修改】
(2)OUT
限定這個(gè)值是從存儲(chǔ)過程傳出的一個(gè)值。
(3)INOUT
既可以作為參數(shù)傳遞給存儲(chǔ)過程,也可以在存儲(chǔ)過程中被修改,傳值出來。
存儲(chǔ)過程的調(diào)用
調(diào)用存儲(chǔ)過程
Call 儲(chǔ)存過程名(參數(shù));
對(duì)于In類型的參數(shù),參數(shù)可以是數(shù)值,也可以是變量。對(duì)于out/inout必須是變量。
MYSQL變量必須以@開始。比如call 存儲(chǔ)過程名(“xxx”,@變量名)
存儲(chǔ)過程的刪除
Drop procedure if exists 存儲(chǔ)過程名稱;
存儲(chǔ)過程的亮點(diǎn)使用
游標(biāo)
存儲(chǔ)過程中可以使用游標(biāo),可以對(duì)檢索出來的數(shù)據(jù)集合進(jìn)行遍歷操作。
條件分支
可以根據(jù)條件分支,建立SQL執(zhí)行分子,使存儲(chǔ)過程更加智能。
IF XXX THEN ?SQL語句END IF
(4)?游標(biāo)
游標(biāo)是MYSQL數(shù)據(jù)庫(kù)上的數(shù)據(jù)庫(kù)查詢出來的數(shù)據(jù)結(jié)果集。且只能用于存儲(chǔ)過程。
1)?使用游標(biāo)的步驟
定義游標(biāo)
這個(gè)過程實(shí)際上沒有檢索數(shù)據(jù),只是定義要使用的SELECT語句。
打開游標(biāo)
這個(gè)過程用前面定義的SELECT語句把數(shù)據(jù)實(shí)際檢索出來。
使用游標(biāo)
對(duì)于填有數(shù)據(jù)的游標(biāo),根據(jù)需要取出(檢索)各行。
關(guān)閉游標(biāo)
結(jié)束游標(biāo)使用時(shí),必須關(guān)閉游標(biāo)。
2)?創(chuàng)建游標(biāo)
定義游標(biāo)
DELCAREordernumbers??CURSOR
FOR
SELECT order_num FROM orders;
打開游標(biāo)
OPEN?ordernumbers;
關(guān)閉游標(biāo)
CLOSEordernumbers;
3)?使用游標(biāo)
1.FETCH:獲取每一條數(shù)據(jù)
FETCH指定檢索什么數(shù)據(jù)(所需的列),檢索出來的數(shù)據(jù)存儲(chǔ)在什么地方。它還向前移動(dòng)游標(biāo)中的內(nèi)部行指針,使下一條FETCH語句檢索下一行(不重復(fù)讀取同一行)。
2.FETCH:循環(huán)檢索數(shù)據(jù)
DELIMITER?//CREATE?PROCEDURE?processorders()BEGIN
-- Declare local variables
DECLARE?done BOOLEAN?DEFAULT?0;
DECLARE?o INT;
-- Delcare the cursor
DELCARE ordernumbers CURSOR
FOR
SELECT?order_num FROM?orders;
-- Declare continue handler
DECLARE?CONTINUE?HANDLER?FOR?SQLSTATE '02000'?SET?done=1;
-- Open the cursor
OPEN?ordernumbers;
-- Loop through all rows
REPEAT
-- Get order number
FETCH?ordernumbers INTO?o;
-- End of loop
UNTIL done END?REPEAT;
-- Close the cursor
CLOSE?ordernumbers;END?//DELIMITER?;
這里的FETCH在REPEAT內(nèi),因此反復(fù)執(zhí)行直到done為真。
上面這條語句定義了一個(gè)CONTINUE HANDLER,它是在條件出現(xiàn)時(shí)被執(zhí)行的代碼。指出當(dāng)SQLSTATE '02000'出現(xiàn)時(shí),SET done=1。
DECLARE語句的次序
i. DECLARE語句定義的局部變量必須在定義任意游標(biāo)或句柄之前定義
ii. 句柄必須在游標(biāo)之后定義(如循環(huán)的條件等)
(5)?觸發(fā)器
觸發(fā)器是一種和數(shù)據(jù)操作有關(guān)的數(shù)據(jù)庫(kù)對(duì)象。當(dāng)觸發(fā)器所在的表出現(xiàn)指定的事件時(shí),將調(diào)用該對(duì)象。
1)?創(chuàng)建觸發(fā)器
MYSQL創(chuàng)建觸發(fā)器的命令如下
CREATE TRIGGER?trigger_name
trigger_time
trigger_event?ON?tbl_name
FOR EACH ROW
trigger_stmt?;
trigger_name:標(biāo)識(shí)觸發(fā)器名稱,用戶自行指定;
trigger_time:標(biāo)識(shí)觸發(fā)時(shí)機(jī),取值為BEFORE或AFTER;
trigger_event:標(biāo)識(shí)觸發(fā)事件,取值為INSERT、UPDATE或DELETE;
tbl_name:標(biāo)識(shí)建立觸發(fā)器的表名,即在哪張表上建立觸發(fā)器;
trigger_stmt:觸發(fā)器程序體,可以是一句SQL語句,或者用BEGIN和END包含的多條語句。
不能在同一張表建立多個(gè)相同類型的觸發(fā)器。所以,一張表最多能建立6個(gè)觸發(fā)器。
2)?NEW和OLD詳解
NEW和OLD用來表示觸發(fā)器的所在表中,觸發(fā)了觸發(fā)器的那一行數(shù)據(jù)。具體如下:
在INSERT觸發(fā)器中。NEW用來表示將要BEFORE或者已經(jīng)AFTER插入的數(shù)據(jù)。
在UPDATE觸發(fā)器中,OLD用來表示將要或者已經(jīng)被修改的原數(shù)據(jù)。NEW用來表示將要或者已經(jīng)被修改后的新數(shù)據(jù)。
在DELETE觸發(fā)器中。OLD用來表示將要或者已經(jīng)被刪除的原數(shù)據(jù)。
使用方法:
NEW.columnName (columnName為相應(yīng)數(shù)據(jù)表某一列名)
OLD 是只讀的,而NEW則可以在觸發(fā)器中使用SET賦值,這樣不會(huì)再次觸發(fā)觸發(fā)器,造成循環(huán)調(diào)用(例如,在一列前添加前綴等)
3)?刪除觸發(fā)器
Drop trigger [IF EXISTS] trigger_name ;
4)?觸發(fā)器的執(zhí)行順序
觸發(fā)器一般建立InnoDB引擎的MYSQL.所以,觸發(fā)器也是事務(wù)安全的。
如果BRFORE 觸發(fā)器執(zhí)行失敗,SQL無法執(zhí)行。
如果SQL執(zhí)行失敗,則AFTER觸發(fā)器就不會(huì)執(zhí)行。
如果AFTER觸發(fā)器執(zhí)行失敗,SQL就會(huì)回滾。
二.?DML數(shù)據(jù)庫(kù)操作語言
Data Manipulation Language (數(shù)據(jù)操作語言)是指INSERT,UPDATE和DELETE語句
DML允許自己添加/修改/刪除數(shù)據(jù)。
(1)?增-插入數(shù)據(jù)
插入數(shù)據(jù)的同時(shí),會(huì)插入數(shù)據(jù)對(duì)應(yīng)的索引。所以,比較耗時(shí)。如果,需要盡快將數(shù)據(jù)插入,方便及時(shí)查詢數(shù)據(jù)。可以先插入數(shù)據(jù)。之后再生成索引。
在insert into之間加入關(guān)鍵字。LOW_PRIORITY. =>INSERT LOW_PRIORITY INTO
1)?插入單行數(shù)據(jù)
INSERT INTO TABLE_NAME(column1,...column_N) values(value1,... value_N)
2)?插入多行數(shù)據(jù)
INSERT INTO TABLE_NAME(column1,...column_N) values(value1,... value_N),(value1,... value_N),(value1,... value_N)...,(value1,... value_N);
3)?插入查詢數(shù)據(jù) insert into select
INSERT INTO TABLE_NAME(column1,...column_N) selectcolumn1 , ... column_N fromTABLE_NAME2;
(2)?刪-刪除數(shù)據(jù)
DELETE FROM TABLE WHERE 子句;
Truncate 和delete比較?; -刪除整張表。比delete from table速度快。主要原因是,先刪除原來的表,再創(chuàng)建一個(gè)新表。
(3)?改-修改數(shù)據(jù)
UPDATE TABLE SET COLUMN =“xxx”WHERE 子句;
三.?DQL 數(shù)據(jù)庫(kù)查詢語言
Data Query Language (數(shù)據(jù)查詢語言)是指SELECT,SHOW和HELP語句(查詢)
SELECT是主要的DQL指令。它會(huì)檢索您需要的數(shù)據(jù)。SHOW檢索有關(guān)元數(shù)據(jù)的信息。HELP...適合需要幫助的人。
(1)?基本查詢
Select 的子句順序如下:
Select -> from ->where ->group by -> having -> order by ->limit
1)?Select
Select?columns|* from table ;字段別名使用 column as alias
1.常規(guī)字段
Select子句中,column一個(gè)或者多個(gè)或者*
2.拼接字段
使用拼接函數(shù)concat(),拼接一個(gè)或者多個(gè)字符/字段 作為一個(gè)字段返回。
3.計(jì)算字段
多個(gè)字段進(jìn)行四則計(jì)算,作為一個(gè)字段返回。
4.測(cè)試使用
Select 可以不配合from子句,自己直接運(yùn)行。通常用來測(cè)試/驗(yàn)證函數(shù)。
5.去重
在select 和form之間 使用distinct。對(duì)檢索出的數(shù)據(jù)集去重。
2)?Aggregate function
聚集函數(shù)
需注意兩點(diǎn):
其一:一種是ALL模式,也是默認(rèn)的模式。另外一種DISTINCT模式。DISTINCT是對(duì)數(shù)據(jù)先進(jìn)行去重,之后再進(jìn)行聚合運(yùn)算。
其二:聚合函數(shù)和分組子句并不需要一定配合使用。也就是說,聚合函數(shù)單獨(dú)使用就是對(duì)當(dāng)前數(shù)據(jù)集進(jìn)行聚合運(yùn)算。聚合函數(shù)和分組子句配合使用,就是先分組,然后在各個(gè)組上再進(jìn)行聚合運(yùn)算。
1.Count(*|column)
有兩種使用,count(*) 和count(column)。都是確定表中的行數(shù)。區(qū)別。第一個(gè)count(*)代表所有的行數(shù),真正查出集合的行數(shù)。第二個(gè)column(column)代表所有行中column非空的行數(shù)。
2.Avg(column)
針對(duì)column 如果為null,在計(jì)算平均值的時(shí)候,不計(jì)算在內(nèi)(總值不會(huì)加,行數(shù)也不會(huì)加)。
3.Sum(column)
返回列之和
4.Max(column)
返回列中最大值
5.Min(column)
返回列中最小值
3)?Where
搜索條件、過濾條件。復(fù)雜邏輯的時(shí)候,最好使用小括號(hào),邏輯關(guān)系更清楚一些。
1.單條件過濾
等于、不等于、大于、小于等直接過濾
范圍 Where column begin?start_value and?end_value ;
空值 where column is null ;
2.組合Where
And 操作
Where?column1_condition and?column2_condition ;
可以是2個(gè)或者多個(gè)條件,使用and鏈接。相當(dāng)于邏輯且。檢索出的數(shù)據(jù)集合必須兩個(gè)條件都滿足。
Or 操作
Where?column1_condition orcolumn2_condition ;
相當(dāng)于邏輯或,只要滿足多個(gè)條件中的一個(gè)就行。
In 操作
Where?columnin (值域集合,用逗號(hào)隔開);
功能上類似or,column是集合中任何一個(gè)即可。
Not 操作
否定它之后跟的任何條件。Not 只和IN、Between和Exists三個(gè)配合使用。
3.Like
模糊匹配,對(duì)不確定的進(jìn)行匹配。是整列匹配。意思是,描述的是整列的結(jié)構(gòu)。整列的結(jié)構(gòu)和通配符描述的結(jié)構(gòu)一致,才可以。通配符:用來匹配值的一部分的特殊字符。
模糊匹配效率比較低,所以在多個(gè)條件過濾的時(shí)候,將模糊匹配放在最后執(zhí)行。
Wherecolumn likeXXX(使用通配符)
%
%表示任意字符出現(xiàn)任意多次【0或者多個(gè)】。
_
只匹配單個(gè)字符而不是多個(gè)字符。
4.Regexp
正則表達(dá)式的作用是匹配文本。將一個(gè)模式(正則表達(dá)式)和一個(gè)文本進(jìn)行比較。不是整列匹配。只要正則描述的單元在列中出現(xiàn),這行數(shù)據(jù)即匹配上了。
Wherecolumn regexp“model”?;
基本字符匹配
進(jìn)行OR匹配
Or 在正則中表示”|”
匹配幾個(gè)字符之一
用中括號(hào)[]
匹配范圍
[1-5]
匹配特殊字符
轉(zhuǎn)義字符 \\緊跟特殊字符。
匹配多個(gè)實(shí)例
*代表0或者多個(gè);+代表一個(gè)或多個(gè);?代表0個(gè)或者1個(gè);{n}代表指定數(shù)據(jù)個(gè);{n,}不少于指定數(shù)目個(gè);{n,m}匹配數(shù)據(jù)的范圍
定位符
^代表文本的開始。$代表文本的結(jié)束。[[:<:>:]]代表詞的結(jié)束。
4)?Group By
數(shù)據(jù)分組:允許對(duì)數(shù)據(jù)邏輯分組,以便對(duì)每個(gè)組進(jìn)行聚合計(jì)算。但是聚集函數(shù)不是必須需要和分組子句配合使用的。
1.創(chuàng)建分組
通常在where 子句后 ,使用Group By columns;
如果多個(gè)分組字段,使用逗號(hào)隔開。
Group by 語句中的對(duì)應(yīng)的select子句。必須是聚集函數(shù)或者是group by后的字段。
如果有where 子句。則group by出現(xiàn)在where子句之后,在order by子句之前。
Rollup,使用with ROLLUP關(guān)鍵字,可以使得每個(gè)分組以及每個(gè)分組匯總級(jí)別的值。
2.Having 分組過濾
所有的where 都可以使用having替代。唯一差別是where是過濾行,having是過濾分組。
Having aggregate function() 比較符 數(shù)值。
3.分組和排序
Order by 可以和Group By配合使用,通常order by跟在group By子句之后。對(duì)數(shù)據(jù)集合分組聚合之后,再按照指定的字段進(jìn)行排序。
5)?Order by
排序
后面跟一個(gè)或多個(gè)字段。升序或者降序排列的確定,需要給每個(gè)字段指定。比如 order by column1 desc?,column2 asc
其中 desc 為降序,asc為升序。
6)?Limit 限制返回結(jié)果
1.Limit 2
返回最前面2行。如果總行數(shù)小于2,則全部返回。
2.Limit 2,3
從第2行開始,返回3行,即為行3至行5。檢索出來第一行是0而不是1.
(2)?復(fù)雜查詢
1)?子查詢
嵌套在其它查詢中的查詢。
子查詢的執(zhí)行順序是由內(nèi)向位處理的。
1.子查詢做過濾
即在where 子句中使用子查詢。子查詢的結(jié)果作為外層查詢的過濾集合。
2.子查詢作為計(jì)算字段
即在select 子句中,某些字段使用子查詢來實(shí)現(xiàn)。
2)?關(guān)聯(lián)組
關(guān)聯(lián)的本質(zhì)是將第一張表的每一行和第二張表中的每一行配對(duì)。
1.內(nèi)關(guān)聯(lián)
Inner join
使用格式為select XXX from table1 inner join?table2 oncondition
最后選擇出的是兩側(cè)都有值的行。
2.外關(guān)聯(lián)
Left/right join
假設(shè) A left/right B ,如果是左關(guān)聯(lián),則可以理解為A是主表。如果是右關(guān)聯(lián),則B表位主表;主表的所有的行都存在,附表中只有關(guān)聯(lián)上的行才存在。
3.自關(guān)聯(lián)
同一張表和自己關(guān)聯(lián)。稱之為自關(guān)聯(lián)。關(guān)聯(lián)需要使用別名。
3)?組合查詢
Union?將多個(gè)查詢結(jié)果并起來返回 稱之為組合查詢。
場(chǎng)景:其一:兩種表結(jié)構(gòu)類似的表查詢,返回后union。其二:對(duì)同一張表多次查詢,結(jié)果合并返回。
1.Union 和union all區(qū)別
Union 是去除重復(fù)的。
Union All 是不去重復(fù)的。多個(gè)元素行,如果有重復(fù)的。會(huì)保留。
2.組合查詢排序
Union 的 最后一條select語句之后,使用order by子句。結(jié)果就是對(duì)整個(gè)union 句子進(jìn)行排序。
(3)?操作符
1)?比較操作符
大于>小于
2)?算數(shù)操作符
加+減-乘*除/
3)?連接操作符
且and 或or
4)?邏輯操作符
Between ... and
like/not like
in/not in
(4)?通配符
% 代表0個(gè)或多個(gè)字符
_ 代表一個(gè)字符
(5)?常用函數(shù)
1)?字符串函數(shù)
Left(str,length)、right(str,length)
從左開始截取指定長(zhǎng)度的字符串
從右開始截取指定長(zhǎng)度的字符串
Length(str)
返回字符串的長(zhǎng)度
Locate(substr,str)
返回子串在字符串中第一個(gè)位置。
Lower(str)、Upper(str)
字符串轉(zhuǎn)小寫、字符串轉(zhuǎn)大寫
Trim(Str)、LTrim(str)、RTrim(str)
字符串兩邊去空格、字符串左邊去空格、字符串右邊去空格
substring(str, pos),substring(str, pos, length)
分別代表
字符串從pos位置開始截取,直至字符串尾部。
字符串從pos位置開始截取,截取長(zhǎng)度為length個(gè)字符的字符串。
2)?聚集函數(shù)
3)?數(shù)值處理函
4)?數(shù)日期函數(shù)
AddDate()、DayOfWeek()
(6)?復(fù)雜函數(shù)
(7)?全文本搜索
四.?DCL數(shù)據(jù)庫(kù)控制語言
data control language (數(shù)據(jù)控制語言)是指GRANT和REVOKE語句
DCL用于授予/撤消對(duì)數(shù)據(jù)庫(kù)及其內(nèi)容的權(quán)限。DCL很簡(jiǎn)單,但MySQL的權(quán)限相當(dāng)復(fù)雜。DCL是關(guān)于安全性的。
MYSQL數(shù)據(jù)庫(kù)的安全基礎(chǔ)是:用戶對(duì)自己需要的數(shù)據(jù)具有適當(dāng)?shù)臋?quán)限。
DCL思維導(dǎo)圖
(1)權(quán)限
權(quán)限類型
常用權(quán)限(pri_type)包括:ALL, SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP等
級(jí)別全局級(jí)
*.* ?所有數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)級(jí)
.* ??某一個(gè)數(shù)據(jù)庫(kù),例如:test.*
表級(jí)
. ??某個(gè)數(shù)據(jù)庫(kù)的某個(gè)表:test.students
(2)用戶權(quán)限操作
給用戶授權(quán)
grant pri_type on db_name.t_name to 'username'@'host' ; grant pri_type on db_name.t_name to 'username'@'host' ;
刪除用戶權(quán)限
revoke pri_type on db_name.t_name from 'user'@'host';
查看權(quán)限指定用戶(root用戶)
show grants for 'username'@'%';
自己
show grants;
(1)?用戶管理
1)?創(chuàng)建用戶
MYSQL是一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)。有自帶數(shù)據(jù)庫(kù)和用戶創(chuàng)建的數(shù)據(jù)庫(kù)。用戶創(chuàng)建數(shù)據(jù)庫(kù)的結(jié)構(gòu)在自帶數(shù)據(jù)庫(kù)中保存。同樣,創(chuàng)建的用戶在mysql數(shù)據(jù)庫(kù)的user表中保存。
Create USER‘用戶名’@’允許其登錄的地址’identified by?‘密碼’;
說明
創(chuàng)建的用戶需同時(shí)指定該用戶可以在哪個(gè)地址進(jìn)行登錄。
其中“%”代表“任何地址”。
用戶創(chuàng)建之后,自動(dòng)在mysql的user表中添加了一條記錄,但該用戶還沒有權(quán)限。
2)?刪除用戶
DROP USER?‘用戶名’@’允許其登錄的地址’;
3)?修改用戶密碼
修改自己密碼
set password = password(‘新密碼’);
修改其它用戶密碼
set password for?‘用戶名’@’允許其登錄的地址’ =password(‘新密碼’);
(2)?權(quán)限分配
1)?添加權(quán)限
Grant
添加權(quán)限至少包含三部分內(nèi)容。要授予的權(quán)限、被授予權(quán)限的數(shù)據(jù)庫(kù)或者表、用戶名。
格式:
Grant權(quán)限名1,...權(quán)限名nON數(shù)據(jù)庫(kù)名.對(duì)象名TO‘用戶名’@’允許登錄的地址’?;
常用權(quán)限(pri_type)包括:ALL, SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP等
對(duì)象名:代表數(shù)據(jù)庫(kù)中的東西,通常是表、視圖、存儲(chǔ)過程。
其中”*.*”代表所有數(shù)據(jù)庫(kù)的所有對(duì)象。
2)?收回權(quán)限
Revoke,格式如下
revoke?權(quán)限名1,權(quán)限名2,....on 數(shù)據(jù)庫(kù)名.對(duì)象名from‘用戶名’@’允許其登錄的地址’ ;
五.?DTL事務(wù)控制語言
Data Transaction Language(數(shù)據(jù)事務(wù)語言)是指START TRANSACTION,SAVEPOINT,COMMIT和ROLLBACK [TO SAVEPOINT]語句。
DTL用于管理事務(wù)(包含更多指令的操作,如果其中一個(gè)指令失敗,則不能執(zhí)行這些指令)。
(1)?是什么事務(wù)
事務(wù)就是用來保證多條”增刪改”語句執(zhí)行的一致性。要么都執(zhí)行,要么都不執(zhí)行。
MYSQL 的執(zhí)行引擎,innoDB支持事務(wù)。MyISAM不支持事務(wù)。
(2)?事務(wù)的特點(diǎn)
1)?原子性
一個(gè)事務(wù)中的所有語句,應(yīng)該做到:要么都做,要么都不作。
2)?一致性
數(shù)據(jù)在邏輯上保持”合理性”。
3)?隔離性
如果多個(gè)事務(wù)并發(fā)執(zhí)行,每個(gè)事務(wù)都像各自獨(dú)立執(zhí)行一樣。
4)?持久性
一個(gè)事務(wù)執(zhí)行成功,對(duì)數(shù)據(jù)而言,是一個(gè)明確的磁盤數(shù)據(jù)更改(而不是僅僅內(nèi)存的變化)。
(3)?事務(wù)模式
在cmd命令行模式中,是否開啟了”一行命令就是一個(gè)事務(wù)”的這個(gè)開關(guān)。這個(gè)稱謂自動(dòng)提交模式。
1.自動(dòng)提交模式
MYSQL默認(rèn)是自動(dòng)提交模式。autocommit=1;
2.手動(dòng)提交模式
Set autocommit=0;如果設(shè)置為手動(dòng)提交模式,則所有的增刪改操作都需要手動(dòng)的提交。即在執(zhí)行SQL語句后,再執(zhí)行commit才能生效;
(4)?事務(wù)執(zhí)行流程
1.事務(wù)的幾個(gè)概念
事務(wù)Transaction
指一組SQL語句。
回退Rollback
指撤銷執(zhí)行指定SQL語句的過程。
提交Commit
指將為未存儲(chǔ)的SQL語句結(jié)果寫入數(shù)據(jù)庫(kù)。
保留點(diǎn)Savepoint
指事務(wù)處理中設(shè)置的臨時(shí)占位符。可以對(duì)它發(fā)布回退。可以在之前定義一個(gè)位置為保留點(diǎn),需要回滾的時(shí)候,可以回滾到指定的保留點(diǎn)。
2.事務(wù)的執(zhí)行流程
開始事務(wù)
Start transaction ;
執(zhí)行多條增刪改語句
根據(jù)語句的執(zhí)行結(jié)果,提交或者回退
If(沒有出錯(cuò)){
Commit; //事務(wù)提交,所都都執(zhí)行
}else {
Rollback; //回滾事務(wù),所有都沒執(zhí)行
}
總結(jié)
以上是生活随笔為你收集整理的mysql必学十大必会_MYSQL 学习(一)--启蒙篇《MYSQL必知必会》的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 双等号(==) 与equals
- 下一篇: bootstrap-table tool