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