日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql必学十大必会_MYSQL 学习(一)--启蒙篇《MYSQL必知必会》

發(fā)布時(shí)間:2024/9/27 数据库 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql必学十大必会_MYSQL 学习(一)--启蒙篇《MYSQL必知必会》 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。