MySQL易忘難點(diǎn)內(nèi)容整理(PPTX)_第1頁
MySQL易忘難點(diǎn)內(nèi)容整理(PPTX)_第2頁
MySQL易忘難點(diǎn)內(nèi)容整理(PPTX)_第3頁
MySQL易忘難點(diǎn)內(nèi)容整理(PPTX)_第4頁
MySQL易忘難點(diǎn)內(nèi)容整理(PPTX)_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、外鍵外鍵總結(jié):總結(jié):(上面例證的前提外鍵是默認(rèn)的約束類型restrict(no action) ) 不能刪除/更新主鍵關(guān)聯(lián)列,插入操作隨意; 不能更新子表外鍵關(guān)聯(lián)字段,不可插入非外鍵關(guān)聯(lián)字段,刪除操作隨意。更新父表非主鍵關(guān)聯(lián)字段刪除/更新父表主鍵關(guān)聯(lián)字段刪除子表任意字段插入子表非外鍵關(guān)聯(lián)字段插入子表外鍵關(guān)聯(lián)字段插入父表任意字段還要注意:當(dāng)兩個表主外鍵列間不滿足數(shù)據(jù)一致完整性時,建立外鍵連接會報錯。添加外鍵:添加外鍵:alter table infos add constraint fk_inf_stu foreign key(Name) references students(Name);建表

2、時添加外鍵:建表時添加外鍵:create table infos(Name char(10) references students(Name) , )在給表定義觸發(fā)器時,一定要注意外鍵約束。要想可刪除父表關(guān)聯(lián)列字段,可設(shè)置on delete set null,不過之后外鍵連接自動斷開了。添加外鍵的格式添加外鍵的格式: ALTER TABLE yourtablename ADD CONSTRAINT 外鍵名 FOREIGN KEY id (index_col_name, .) REFERENCES tbl_name (index_col_name, .) ON DELETE CASCADE |

3、 SET NULL | NO ACTION | RESTRICT ON UPDATE CASCADE | SET NULL | NO ACTION | RESTRICTCASCADE:在父表上update/delete記錄時,同步update/delete掉子表的匹配記錄。 Set NULL:在父表上update/delete記錄時,將子表上匹配記錄的列設(shè)為null。 要注意子表的外鍵列不能為not null 。建立的主鍵會自動添加索引,建立外鍵后也給外鍵列添加了索引。刪除/更新時的自動觸發(fā)動作是單獨(dú)設(shè)置的,指的是當(dāng)父表刪除、更新時外鍵表的動作。現(xiàn)若設(shè)置為“SET NULL”,報錯!creat

4、e index語句用于在表中創(chuàng)建索引,索引使數(shù)據(jù)庫應(yīng)用程序可以更快地查找數(shù)據(jù)。用戶無法看到索引,它們只能被用來加速搜索/查詢。語法:create index index_name on table_name(col_name);由于在更新表時索引也被更新,故更新速度會慢些,理想的做法是僅僅在常常被搜索的列(以及表)上面創(chuàng)建索引。create trigger newpruduct after insert on products for each row select Product added;若允許空值,則:CREATE TABLE NewTable (Number int(11) NOT

5、NULL AUTO_INCREMENT ,Name varchar(10) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DEFAULT NULL ,activity varchar(20) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DEFAULT NULL ,Score int(11) NULL DEFAULT NULL ,PRIMARY KEY (Number),FOREIGN KEY (Name) REFERENCES students (Name) ON DELETE RESTRICT ON

6、 UPDATE RESTRICT,INDEX fk_inf_stu (Name) USING BTREE )ENGINE=InnoDBDEFAULT CHARACTER SET=gbk COLLATE=gbk_chinese_ciAUTO_INCREMENT=5ROW_FORMAT=COMPACT;1.(1)CASE value WHEN compare-value THEN result WHEN compare-value THEN result . ELSE result END (2)CASE WHEN condition THEN result WHEN condition THEN

7、 result . ELSE result END 在第一個方案的返回結(jié)果中, value=compare-value。而第二個方案的返回結(jié)果是第一種情況的真實(shí)結(jié)果。如果沒有匹配的結(jié)果值,則返回結(jié)果為ELSE后的結(jié)果,如果沒有ELSE 部分,則返回值為 NULL。mysql SELECT CASE x WHEN x THEN x WHEN 2 THEN two ELSE more END;= xmysql SELECT CASE WHEN 10 THEN true ELSE false END;= truemysql SELECT CASE BINARY B WHEN a THEN 1 WHE

8、N b THEN 2 END; NULL一個CASE表達(dá)式的默認(rèn)返回值類型是任何返回值的相容集合類型,但具體情況視其所在語境而定。如果用在字符串語境中,則返回結(jié)果為字符串。如果用在數(shù)字語境中,則返回結(jié)果為十進(jìn)制值、實(shí)值或整數(shù)值。 控制流程函數(shù)控制流程函數(shù)2.IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 0 and expr1 NULL),則 IF()的返回值為expr2; 否則返回值則為 expr3。IF() 的返回值為數(shù)字值或字符串值,具體情況視其所在語境而定。mysql SELECT IF(12,2,3);= 3mysql SELECT IF(1

9、yesmysql SELECT IF(STRCMP(test,test1),no,yes);= no如果expr2 或expr3中只有一個明確是 NULL,則IF() 函數(shù)的結(jié)果類型 為非NULL表達(dá)式的結(jié)果類型。 expr1 作為一個整數(shù)值進(jìn)行計算作為一個整數(shù)值進(jìn)行計算,就是說,假如你正在驗證浮點(diǎn)值或字符串值, 那么應(yīng)該使用比較運(yùn)算進(jìn)行檢驗。 mysql SELECT IF(0.1,1,0);= 0mysql SELECT IF(0.10,1,0);= 1在所示的第一個例子中,IF(0.1)的返回值為0,原因是 0.1 被轉(zhuǎn)化為整數(shù)值,從而引起一個對 IF(0)的檢驗。這或許不是你想要的情況

10、。在第二個例子中,比較檢驗了原始浮點(diǎn)值,目的是為了了解是否其為非零值。比較結(jié)果使用整數(shù)。 IF() (這一點(diǎn)在其被儲存到臨時表時很重要 ) 的默認(rèn)返回值類型按照以下方式計算: 表達(dá)式表達(dá)式返回值返回值expr2 或expr3 返回值為一個字符串。字符串expr2 或expr3 返回值為一個浮點(diǎn)值。浮點(diǎn)expr2 或 expr3 返回值為一個整數(shù)。 整數(shù)假如expr2 和expr3 都是字符串,且其中任何一個字符串區(qū)分大小寫,則返回結(jié)果是區(qū)分大小寫。3.IFNULL(expr1,expr2) 假如expr1 不為 NULL,則 IFNULL() 的返回值為 expr1; 否則其返回值為 expr

11、2。IFNULL()的返回值是數(shù)字或是字符串,具體情況取決于其所使用的語境。 mysql SELECT IFNULL(1,0);= 1mysql SELECT IFNULL(NULL,10);= 10mysql SELECT IFNULL(1/0,10);= 10mysql SELECT IFNULL(1/0,yes);= yesIFNULL(expr1,expr2)的默認(rèn)結(jié)果值為兩個表達(dá)式中更加“通用”的一個,順序為STRING、 REAL或 INTEGER。假設(shè)一個基于表達(dá)式的表的情況, 或MySQL必須在內(nèi)存儲器中儲存一個臨時表中IFNULL()的返回值:CREATE TABLE tmp

12、 SELECT IFNULL(1,test) AS test;在這個例子中,測試列的類型為 CHAR(4)。4.NULLIF(expr1,expr2) 如果expr1 = expr2 成立,那么返回值為NULL,否則返回值為 expr1。這和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同。 mysql SELECT NULLIF(1,1);= NULLmysql SELECT NULLIF(1,2);= 1注意,如果參數(shù)不相等,則 MySQL 兩次求得的值為 expr1 。在MySQL存儲過程的語句中有三個標(biāo)準(zhǔn)的循環(huán)方式:WHILE循環(huán),L

13、OOP循環(huán)以及REPEAT循環(huán)。還有一種非標(biāo)準(zhǔn)的循環(huán)方式:GOTO,不過這種循環(huán)方式最好別用,很容易引起程序的混亂,在這里就不錯具體介紹了。這幾個循環(huán)語句的格式如下:WHILEDOEND WHILEREPEATUNTIL END REPEATLOOPEND LOOPGOTO。下面首先使用第一種循環(huán)編寫一個例子。mysql create procedure pro10()- begin- declare i int;- set i=0;- while i insert into t1(filed) values(i);- set i=i+1;- end while;- end;/再來看一下第二個

14、循環(huán)控制指令 REPEATEND REPEAT。使用REPEAT循環(huán)控制語句編寫下面這個存儲過程:mysql create procedure pro11()- begin- declare i int default 0;- repeat- insert into t1(filed) values(i);- set i=i+1;- until i=5- end repeat;- end;/mysql存儲過程中的循環(huán)語句存儲過程中的循環(huán)語句再來看一下第三個循環(huán)控制語句LOOPEND LOOP。編寫一個存儲過程程序如下:mysql create procedure pro12()- begin-

15、 declare i int default 0;- loop_label: loop- insert into t1(filed) values(i);- set i=i+1;- if i=5 then /條件語句if then end if- leave loop_label; - end if;- end loop;- end;/Labels 標(biāo)號和 END Labels 結(jié)束標(biāo)號在使用loop的時候,使用到的labels標(biāo)號,對于labels可以用到while,loop,repeat等循環(huán)控制語句中。而且有必要好好認(rèn)識一下lables!! /類似于java中帶標(biāo)簽的break、cont

16、inue語句mysql create procedure pro13()- label_1:begin- label_2:while 0=1 do leave label_2;end while;- label_3:repeat leave label_3;until 0=0 end repeat;- label_4:loop leave label_4;end loop;- end;/上面這里例子顯示了可以在BEGIN、WHILE、REPEAT或者LOOP語句前使用語句標(biāo)號,語句標(biāo)號只能在合法的語句前使用,所以LEAVE label_3意味著離開語句標(biāo)號名為label_3的語句或符合語句。其

17、實(shí),也可以使用END labels來表示標(biāo)號結(jié)束符。mysql create procedure pro14()- label_1:begin- label_2:while 0=1 do leave label_2;end while label_2;- label_3:repeat leave label_3;until 0=0 end repeat label_3;- label_4:loop leave label_4;end loop label_4;- end label_1;/上面就是使用了標(biāo)號結(jié)束符,其實(shí)這個結(jié)束標(biāo)號并不是十分有用,而且他必須和開始定義的標(biāo)號名字一樣,否則就會報錯

18、。如果要養(yǎng)成一個良好的編程習(xí)慣方便他人閱讀的話,可以使用這個標(biāo)號結(jié)束符。while(true)(loop) leave ;(循環(huán)結(jié)束條件語句)(end loop)ITERATE 迭代 如果是在ITERATE語句,即迭代語句中的話,就必須使用LEAVE語句。ITERATE只能出現(xiàn)在LOOP,REPEAT和WHILE語句中,它的意思是“再次循環(huán)”,例如:mysql create procedure pro15()- begin- declare i int default 0;- loop_label:loop- if i=3 then- set i=i+1;- iterate loop_labe

19、l;- end if;- insert into t1(filed) values(i);- set i=i+1;- if i=5 then- leave loop_label;- end if;- end loop;- end;/iterate語句和leave語句一樣,也是在循環(huán)內(nèi)部使用,它有點(diǎn)類似于Java語言中的continue。那么這個存儲程序是怎么運(yùn)行的的?首先i的值為0,條件判斷語句if i=3 then判斷為假,跳過if語段,向數(shù)據(jù)庫中插入0,然后i+1,同樣后面的if i=5 then判斷也為假,也跳過;繼續(xù)循環(huán),同樣插入1和2;在i=3的時候條件判斷語句if i=3 then

20、判斷為真,執(zhí)行i=i+1,i值為4,然后執(zhí)行迭代iterate loop_label;,即語句執(zhí)行到iterate loop_label;后直接跳到if i=3 then判斷語句,執(zhí)行判斷,這個時候由于i=4,if i=3 then判斷為假,跳過IF語段,將4添加到表中,i變?yōu)?,條件判斷if i=5 then判斷為真,執(zhí)行l(wèi)eave loop_label;跳出loop循環(huán),然后執(zhí)行end;/,結(jié)束整個存儲過程。等效于等效于java代碼:代碼:int t1;int i=0;loop_label:while(true) if(i=3)(then) i=i+1; continue loop_lab

21、el; (end if) t1i=i; i=i+1; if(i=5) break loop_label; begin_label: BEGIN statement_listEND end_label 存儲子程序可以使用BEGIN . END復(fù)合語句來包含多個語句。statement_list 代表一個或多個語句的列表。statement_list之內(nèi)每個語句都必須用分號(;)來結(jié)尾。 復(fù)合語句可以被標(biāo)記。除非begin_label存在,否則end_label不能被給出,并且如果二者都存在,他們必須是同樣的。 請注意,可選的NOT ATOMIC子句現(xiàn)在還不被支持。這意味著在指令塊的開始沒有交互的

22、存儲點(diǎn)被設(shè)置,并且在上下文中用到的BEGIN子句對當(dāng)前交互動作沒有影響。使用多重語句需要客戶端能發(fā)送包含語句定界符;的查詢字符串。這個符號在命令行客戶端被用delimiter命令來處理。改變查詢結(jié)尾定界符;(比如改變?yōu)?)使得; 可被用在子程序體中。BEGIN . END復(fù)合語句復(fù)合語句CALL sp_name(parameter,.) CALL語句調(diào)用一個先前用CREATE PROCEDURE創(chuàng)建的程序。 CALL語句可以用聲明為OUT或INOUT的參數(shù)給它的調(diào)用者傳回值。它也“返回”受影響的行數(shù),客戶端程序可以在SQL級別通過調(diào)用ROW_COUNT()函數(shù)獲得這個數(shù),從C中是調(diào)用the m

23、ysql_affected_rows() C API函數(shù)來獲得。CALL語句語句DECLARE語句:語句:DECLARE語句被用來把不同項目局域到局域到一個子程序:局部變量、條件和處理程序及光標(biāo)。(SIGNAL和RESIGNAL語句當(dāng)前還不被支持)DECLARE僅被用在BEGIN . END復(fù)合語句里,并且必須在復(fù)合語句的開頭,在任何其它語句之前。 光標(biāo)必須在聲明處理程序之前被聲明,并且變量和條件必須在聲明光標(biāo)或處理程序之前被聲明。DECLARE局部變量局部變量DECLARE var_name,. type DEFAULT value這個語句被用來聲明局部變量。要給變量提供一個默認(rèn)值,請包含一

24、個DEFAULT子句。值可以被指定為一個表達(dá)式,不需要為一個常數(shù)。如果沒有DEFAULT子句,初始值為NULL。 局部變量的作用范圍在它被聲明的BEGIN . END塊內(nèi)。它可以被用在嵌套的塊中,除了那些用相同名字聲明變量的塊。 DECLARE條件條件DECLARE condition_name CONDITION FOR condition_value 。condition_value: SQLSTATE VALUE sqlstate_value|mysql_error_code這個語句指定需要特殊處理的條件。它將一個名字和指定的錯誤條件關(guān)聯(lián)起來。這個名字可以隨后被用在DECLARE HAN

25、DLER語句中。除了SQLSTATE值,也支持MySQL錯誤代碼。 DECLARE handler_type HANDLER FOR condition_value,. sp_statementhandler_type: CONTINUE | EXIT | UNDOcondition_value: SQLSTATE VALUE sqlstate_value | condition_name | SQLWARNING | NOT FOUND | SQLEXCEPTION | mysql_error_code這個語句指定每個可以處理一個或多個條件的處理程序。如果產(chǎn)生一個或多個條件,指定的語句被執(zhí)行

26、。 對一個CONTINUE處理程序,當(dāng)前子程序的執(zhí)行在執(zhí)行處理程序語句之后繼續(xù)。對于EXIT處理程序,當(dāng)前BEGIN.END復(fù)合語句的執(zhí)行被終止。UNDO 處理程序類型語句還不被支持。 SQLWARNING是對所有以01開頭的SQLSTATE代碼的速記。 NOT FOUND是對所有以02開頭的SQLSTATE代碼的速記。 SQLEXCEPTION是對所有沒有被SQLWARNING或NOT FOUND捕獲的SQLSTATE代碼的速記。除了SQLSTATE值,MySQL錯誤代碼也不被支持。DECLARE處理程序處理程序例如: mysql CREATE TABLE test.t (s1 int,pr

27、imary key (s1);Query OK, 0 rows affected (0.00 sec) mysql delimiter / mysql CREATE PROCEDURE handlerdemo () - BEGIN - DECLARE CONTINUE HANDLER FOR SQLSTATE 23000 SET x2 = 1; /23000:主鍵約束不唯一 - SET x = 1; - INSERT INTO test.t VALUES (1); - SET x = 2; - INSERT INTO test.t VALUES (1); /此句只是使x2=1,此句并未執(zhí)行成功

28、,斷續(xù)執(zhí)行下面的語句【SQLSTATE消息大全.doc】 - SET x = 3; - END; - /Query OK, 0 rows affected (0.00 sec) mysql CALL handlerdemo()/Query OK, 0 rows affected (0.00 sec) mysql SELECT x/ +-+ | x | +-+ | 3 | +-+ 1 row in set (0.00 sec)注意到,x是3,這表明MySQL被執(zhí)行到程序的末尾。如果DECLARE CONTINUE HANDLER FOR SQLSTATE 23000 SET x2 = 1; 這一

29、行不在,第二個INSERT因PRIMARY KEY強(qiáng)制而失敗之后,MySQL可能已經(jīng)采取默認(rèn)(EXIT)路徑,并且SELECT x可能已經(jīng)返回2。 SELECT col_name,. INTO var_name,. table_expr 這個SELECT語法把選定的列直接存儲到變量。因此,只有單一的行可以被取回。 SELECT id,data INTO x,y FROM test.t1 LIMIT 1; 注意,用戶變量名在MySQL 5.1中是對大小寫不敏感的。 重要重要: SQL變量名不能和列名一樣。如果SELECT . INTO這樣的SQL語句包含一個對列的參考,并包含一個與列相同名字的局

30、部變量,MySQL當(dāng)前把參考解釋為一個變量的名字。例如,在下面的語句中,xname 被解釋為到xname variable 的參考而不是到xname column的: SELECT . INTO語句語句CREATE PROCEDURE sp1 (x VARCHAR(5) BEGIN DECLARE xname VARCHAR(5) DEFAULT bob; DECLARE newname VARCHAR(5); DECLARE xid INT; SELECT xname,id INTO newname,xid FROM table1 WHERE xname = xname; SELECT ne

31、wname; END;當(dāng)這個程序被調(diào)用的時候,無論table.xname列的值是什么,變量newname將返回值bob。SET var_name = expr , var_name = expr .在存儲程序中的SET語句是一般SET語句的擴(kuò)展版本。被參考變量可能是子程序內(nèi)聲明的變量,或者是全局服務(wù)器變量。 在存儲程序中的SET語句作為預(yù)先存在的SET語法的一部分來實(shí)現(xiàn)。這允許SET a=x, b=y, .這樣的擴(kuò)展語法。其中不同的變量類型(局域聲明變量及全局和集體變量)可以被混合起來。這也允許把局部變量和一些只對系統(tǒng)變量有意義的選項合并起來。在那種情況下,此選項被識別,但是被忽略了。變量變量

32、SET語句語句模式匹配模式匹配要想找出以“b”開頭的名字:mysql SELECT * FROM pet WHERE name LIKE b%; 要想找出以“fy”結(jié)尾的名字:mysql SELECT * FROM pet WHERE name LIKE %fy; 要想找出包含“w”的名字:mysql SELECT * FROM pet WHERE name LIKE %w%; 要想找出正好包含5個字符的名字,使用“_”模式字符:mysql SELECT * FROM pet WHERE name LIKE _ _ _ _ _; SQL模式匹配允許你使用“_”匹配任何單個字符,而“%”匹配任意

33、數(shù)目字符(包括零字符)。注意使用SQL模式時,不能使用=或!=;而應(yīng)使用LIKE或NOT LIKE比較操作符。 由MySQL提供的模式匹配的其它類型是使用擴(kuò)展正則表達(dá)式。當(dāng)你對這類模式進(jìn)行匹配測試時,使用REGEXP和NOT REGEXP操作符。擴(kuò)展正則表達(dá)式的一些字符是: . 匹配任何單個的字符。 字符類字符類“.” 匹配在方括號內(nèi)的任何字符。 例如,“abc”匹配“a”、“b”或“c”。為了命名字符的范圍,使用一個“-”?!癮-z”匹配任何字母,而“0-9”匹配任何數(shù)字。 “ * * ” 匹配零個或多個在它前面的字符。例如,“x*”匹配任何數(shù)量的“x”字符,“0-9*”匹配任何數(shù)量的數(shù)字,

34、而“.*”匹配任何數(shù)量的任何字符。如果REGEXP模式與被測試值的任何地方匹配,模式就匹配(這不同于LIKE模式匹配,只有與整個值匹配,模式才匹配)。 為了定位一個模式以便它必須匹配被測試值的開始或結(jié)尾,在模式開始處使用“”或在模式的結(jié)尾用“$”。 正則表達(dá)式正則表達(dá)式為了找出以“b”開頭的名字,使用“”匹配名字的開始:mysql SELECT * FROM pet WHERE name REGEXP b;如果你想強(qiáng)制使REGEXP比較區(qū)分大小寫,使用BINARY關(guān)鍵字使其中一個字符串變?yōu)槎M(jìn)制字符串。該查詢只匹配名稱首字母的小寫b。mysql SELECT * FROM pet WHERE

35、name REGEXP BINARY b;為了找出以“fy”結(jié)尾的名字,使用“$”匹配名字的結(jié)尾:mysql SELECT * FROM pet WHERE name REGEXP fy$;為了找出包含一個“w”的名字,使用以下查詢:mysql SELECT * FROM pet WHERE name REGEXP w;為了找出包含正好5個字符的名字,使用“”和“$”匹配名字的開始和結(jié)尾,和5個“.”實(shí)例在兩者之間:mysql SELECT * FROM pet WHERE name REGEXP .$;+-+-+-+-+-+-+| name | owner | species | sex |

36、 birth | death |+-+-+-+-+-+-+| Claws | Gwen | cat | m | 1994-03-17 | NULL | Buffy | Harold | dog | f | 1989-05-13 | NULL |+-+-+-+-+-+-+你也可以使用“n”“重復(fù)n次”操作符重寫前面的查詢:mysql SELECT * FROM pet WHERE name REGEXP .5$;/查詢結(jié)果和上面一樣mysql SELECT * FROM pet WHERE name REGEXP w;+-+-+-+-+-+-+| name | owner | species |

37、 sex | birth | death |+-+-+-+-+-+-+| Claws | Gwen | cat | m | 1994-03-17 | NULL | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |+-+-+-+-+-+-+regexp word? 可匹配任何帶有 wor word子串的字段 。正則表達(dá)式正則表達(dá)式 描述了一組字符串。最簡單的正則表達(dá)式是不含任何特殊字符的正則表達(dá)式。例如,正則表達(dá)式hello匹配hello

38、。非平凡的正則表達(dá)式采用了特殊的特定結(jié)構(gòu),從而使得它們能夠與1個以上的字符串匹配。例如,正則表達(dá)式hello|word匹配字符串hello或字符串word。作為一個更為復(fù)雜的示例,正則表達(dá)式Ban*s匹配下述字符串中的任何一個:Bananas,Baaaaas,Bs,以及以B開始、以s結(jié)束、并在其中包含任意數(shù)目a或n字符的任何其他字符串。對于對于REGEXP操作符,正則表達(dá)式可以使用任何下述特殊字符和結(jié)構(gòu):操作符,正則表達(dá)式可以使用任何下述特殊字符和結(jié)構(gòu): 匹配字符串的開始部分。mysql SELECT fonfo REGEXP fo$; - 0 mysql SELECT fofo REGEXP

39、 fo; - 1 $ 匹配字符串的結(jié)束部分。mysql SELECT fono REGEXP fono$; - 1 mysql SELECT fono REGEXP fo$; - 0 . 匹配任何字符(包括回車和新行)。mysql SELECT fofo REGEXP f.*$; - 1 mysql SELECT fornfo REGEXP f.*$; - 1 a* 匹配0或多個a字符的任何序列。mysql SELECT Ban REGEXP Ba*n; - 1 mysql SELECT Baaan REGEXP Ba*n; - 1 mysql SELECT Bn REGEXP Ba*n; -

40、 1 a+ 匹配1個或多個a字符的任何序列。mysql SELECT Ban REGEXP Ba+n; - 1 mysql SELECT Bn REGEXP Ba+n; - 0 a? 匹配0個或1個a字符。mysql SELECT Bn REGEXP Ba?n; - 1 mysql SELECT Ban REGEXP Ba?n; - 1 mysql SELECT Baan REGEXP Ba?n; - 0 de|abc 匹配序列de或abc。mysql SELECT pi REGEXP pi | apa; - 1 mysql SELECT axe REGEXP pi|apa; - 0 mysq

41、l SELECT apa REGEXP pi|apa; - 1mysql SELECT apa REGEXP (pi|apa)$; - 1 mysql SELECT pi REGEXP (pi|apa)$; - 1 mysql SELECT pix REGEXP (pi|apa)$; - 0 (abc)* 匹配序列abc的0個或多個實(shí)例。mysql SELECT pi REGEXP (pi)*$; - 1mysql SELECT pip REGEXP (pi)*$; - 0mysql SELECT pipi REGEXP (pi)*$; - 1 1, 2,3 n或m,n符號提供了編寫正則表達(dá)式

42、的更通用方式,能夠匹配模式的很多前述原子(或“部分”)。m和n均為整數(shù)。o a* 可被寫入為a0,。o a+ 可被寫入為a1,。o a? 可被寫入為a0,1。更準(zhǔn)確地講,an與a的n個實(shí)例準(zhǔn)確匹配。an,匹配a的n個或更多實(shí)例。am,n匹配a的mn個實(shí)例,包含m和n。m和n必須位于0RE_DUP_MAX(默認(rèn)為255)的范圍內(nèi),包含0和RE_DUP_MAX。如果同時給定了m和n,m必須小于或等于n。mysql SELECT abcde REGEXP abcd2e; - 0mysql SELECT abcde REGEXP abcd3e; - 1mysql SELECT abcde REGEXP

43、 abcd1,10e; - 1 a-dX, a-dX 匹配任何是(或不是,如果使用的話)a、b、c、d或X的字符。兩個其他字符之間的“-”字符構(gòu)成一個范圍,與從第1個字符開始到第2個字符之間的所有字符匹配。例如,0-9匹配任何十進(jìn)制數(shù)字 。要想包含文字字符“”,它必須緊跟在開括號“”之后。要想包含文字字符“-”,它必須首先或最后寫入。對于對內(nèi)未定義任何特殊含義的任何字符,僅與其本身匹配。mysql SELECT aXbc REGEXP a-dXYZ; - 1mysql SELECT aXbc REGEXP a-dXYZ$; - 0mysql SELECT aXbc REGEXP a-dXYZ+

44、$; - 1mysql SELECT aXbc REGEXP a-dXYZ+$; - 0mysql SELECT gheis REGEXP a-dXYZ+$; - 1mysql SELECT gheisa REGEXP a-dXYZ+$; - 0 .characters. 在括號表達(dá)式中(使用和),匹配用于校對元素的字符序列。字符為單個字符或諸如新行等字符名。在文件regexp/cname.h中,可找到字符名稱的完整列表。mysql SELECT REGEXP .; - 1 mysql SELECT REGEXP .tilde.; - 1 =character_class= 在括號表達(dá)式中(使

45、用和),=character_class=表示等同類。它與具有相同校對值的所有字符匹配,包括它本身,例如,如果o和(+)均是等同類的成員,那么=o=、=(+)=和o(+)是同義詞。等同類不得用作范圍的端點(diǎn)。 :character_class: 在括號表達(dá)式中(使用和),:character_class:表示與術(shù)語類的所有字符匹配的字符類。標(biāo)準(zhǔn)的類名稱是:它們代表在ctype(3)手冊頁面中定義的字符類。特定地區(qū)可能會提供其他類名。字符類不得用作范圍的端點(diǎn)。mysql SELECT justalnums REGEXP :alnum:+; - 1 mysql SELECT ! REGEXP :al

46、num:+; - 0 : 這些標(biāo)記表示word邊界。它們分別與word的開始和結(jié)束匹配。word是一系列字字符,其前面和后面均沒有字字符。字字符是alnum類中的字母數(shù)字字符或下劃線(_)。mysql SELECT a word a REGEXP :; - 1mysql SELECT a xword a REGEXP :; - 0 要想在正則表達(dá)式中使用特殊字符的文字實(shí)例,應(yīng)在其前面加上2個反斜杠“”字符。MySQL解析程序負(fù)責(zé)解釋其中一個,正則表達(dá)式庫負(fù)責(zé)解釋另一個。例如,要想與包含特殊字符“+”的字符串“1+2”匹配,在下面的正則表達(dá)式中,只有最后一個是正確的:mysql SELECT 1

47、+2 REGEXP 1+2; - 0 mysql SELECT 1+2 REGEXP 1+2; - 0mysql SELECT 1+2 REGEXP 1+2; - 1 alnum文字?jǐn)?shù)字字符alpha文字字符blank空白字符cntrl控制字符digit數(shù)字字符graph圖形字符lower小寫文字字符print圖形或空格字符punct標(biāo)點(diǎn)字符space空格、制表符、新行、和回車upper大寫文字字符xdigit十六進(jìn)制數(shù)字字符MySQL實(shí)現(xiàn)行轉(zhuǎn)列實(shí)現(xiàn)行轉(zhuǎn)列行轉(zhuǎn)列SELECT YEAR, sum( CASE WHEN MONTH = 1 THEN VALUE END ) m1, sum( CAS

48、E WHEN MONTH = 2 THEN VALUE END ) m2, sum( CASE WHEN MONTH = 3 THEN VALUE END ) m3, sum( CASE WHEN MONTH = 4 THEN VALUE END ) m4 FROM test GROUP BY YEAR /可去掉sum函數(shù)group_concat():mysql delete from a - using demo as a, demo as b- where (a.id and (a.site = b.site);mysql select a.* - from demo a, demo b- where a.id b.id- and (a.site = b.site);使用表別名使用表別名: (表表 demo)若去掉最后一行的“group by a.year”,輸出:select b.year,b.value from test b,test a where b.year=a.year and b.month=1;等效于兩張不同的表a、b之間通過字段year內(nèi)部聯(lián)結(jié)起來了。聯(lián)結(jié),即與主鍵聯(lián)結(jié)的year會被全部檢索出來。通過year自自聯(lián)結(jié),即把所有自聯(lián)結(jié)字段year保證輸出。case _value

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論