Mysql燕十八學(xué)習(xí)筆記_第1頁(yè)
Mysql燕十八學(xué)習(xí)筆記_第2頁(yè)
Mysql燕十八學(xué)習(xí)筆記_第3頁(yè)
Mysql燕十八學(xué)習(xí)筆記_第4頁(yè)
Mysql燕十八學(xué)習(xí)筆記_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Mysql三大列類(lèi)型1. 數(shù)值型 整型 Tinyint、Smallint、Mediumint、Int、Bigint 小數(shù)型 Float(D,M),Decimal(D,M)2. 字符串型 Char(M) Varchar(M) Text 文本類(lèi)型3. 日期時(shí)間類(lèi)型Date 日期Time 時(shí)間Datetime 時(shí)間類(lèi)型Year年類(lèi)型一 整型列的字節(jié)與存儲(chǔ)范圍從數(shù)學(xué)上討論tinyint,建表時(shí)既能足夠存放,又不浪費(fèi)空間。即:(1). 占據(jù)空間(2). 存儲(chǔ)范圍Tinyint微小的列類(lèi)型,1字節(jié)。類(lèi)型字節(jié)最小值最大值(帶符號(hào)/無(wú)符號(hào))(帶符號(hào)/無(wú)符號(hào))Tinyint1-1281270255Smallin

2、t2-3276832767065535Mediumint3-223223-10224-1Int4-231231-10232-1Bigint8-263 263-10264-1通過(guò)占用字節(jié)和所存范圍分關(guān)系合理的選擇類(lèi)型。例:Tinyint經(jīng)測(cè)試,Tinyint的默認(rèn)為有符號(hào)-128127之間,當(dāng)越界時(shí)自動(dòng)取相應(yīng)的邊界值。若要存0255無(wú)符號(hào)時(shí):列的可選屬性:Tinyint(M) unsigned zerofill.M:寬度(在0填充的時(shí)候才有意義)Unsigned:無(wú)符號(hào)類(lèi)型(非負(fù)),影響存儲(chǔ)范圍Zerofill: 0填充(默認(rèn)無(wú)符號(hào))列可以聲明默認(rèn)值,而且推薦聲明默認(rèn)值 not null def

3、ault 0;二 小數(shù)型/浮點(diǎn)型、定點(diǎn)型Float(M,D):M代表總位數(shù),D代表小數(shù)位(6,2)為例:-9999.99 >9999.99Decimal(D,M) :三 字符型列Char:定長(zhǎng),char(M),M代表寬度,即:可容納的字符數(shù)0<=M<=255Varchar:變長(zhǎng),0<=M<=65535(約2W6W個(gè)字符受字符集影響)Text文本串,(約2W6W個(gè)字符受字符集影響)區(qū)別在哪呢?char定長(zhǎng):M個(gè)字符,如果存的小于M個(gè)字符,實(shí)占M個(gè)字符varchar:M個(gè)字符,存的小于M個(gè)字符,設(shè)為N,N<M,實(shí)占N個(gè)字符因此,char定長(zhǎng)若存空格,讀取時(shí)會(huì)丟失

4、。而變長(zhǎng)不會(huì)。Char利用率小于等于100%,而varchar永遠(yuǎn)小于100%,1-2個(gè)字節(jié)用于標(biāo)志實(shí)存字符長(zhǎng)度。Char(M)如何占據(jù)M個(gè)字符寬度?答:如果實(shí)際存儲(chǔ)內(nèi)容不足M個(gè),則后面加空格補(bǔ)齊,取出來(lái)的時(shí)候再把后面的空格去掉,(所以如果內(nèi)容后面有空格,將會(huì)被清除)選擇原則:1. 空間利用效率(M固定選Char)2. 速度速度上:定長(zhǎng)速度快些,四 日期時(shí)間列類(lèi)型Date 日期Time 時(shí)間Datatime 時(shí)間類(lèi)型Year 年類(lèi)型1. Year類(lèi)型:1個(gè)字節(jié)表示1901-2155年【0000年表示錯(cuò)誤時(shí)】如果輸入兩位,“00-69”表示20002069,如果輸入兩位“70-99”表示1970

5、1999如果記得麻煩,輸入四位就行了、2. Date類(lèi)型:典型格式,1992-08-121000-01-01 à9999-12-313. Time 類(lèi)型,典型格式 hh:mm:ss-838:59:59à+838:59:594. Datetime 典型格式:1989-05-06 12:23:341000-01-01 00:00:00à 9999-12-31 23:59:59注意:在開(kāi)發(fā)中很少使用日期時(shí)間類(lèi)型來(lái)表示一個(gè)需要精確到秒的列,原因:雖然日期時(shí)間類(lèi)型能夠精確到秒,而且方便查看。但是計(jì)算不便。用時(shí)間戳來(lái)表示。時(shí)間戳: 1970-01-01 00:00:00 到當(dāng)

6、前的秒數(shù)面試1:當(dāng)表示性別時(shí),可用1或0表示男女,如,可能會(huì)問(wèn)到為什么不用enum枚舉,原因:enum不符合關(guān)系型數(shù)據(jù)庫(kù)設(shè)計(jì)理念,而且字節(jié)上不比tinyint少。實(shí)例:增刪改查之案例過(guò)程分析用戶(hù)注冊(cè)表單收集,提交數(shù)據(jù),注冊(cè)頁(yè)面收集到表單的數(shù)據(jù)后,形成insert語(yǔ)句,user表插入該條數(shù)據(jù),用戶(hù)注冊(cè)完成前臺(tái)用戶(hù)中心,用戶(hù)新昵稱(chēng),根據(jù)新昵稱(chēng)和用戶(hù)id,形成update語(yǔ)句,完成昵稱(chēng)修改管理后臺(tái)點(diǎn)擊會(huì)員列表,此時(shí),網(wǎng)頁(yè)形成select語(yǔ)句,查詢(xún)出所有會(huì)員的數(shù)據(jù),完成會(huì)員的查看管理員后臺(tái)選中某用戶(hù)并且刪除,捕捉此用戶(hù)的id,根據(jù)用戶(hù)id形成相應(yīng)的delete語(yǔ)句執(zhí)行delete語(yǔ)句,完成用戶(hù)的刪除。

7、階段總結(jié)(一)列類(lèi)型的概念數(shù)值型 整型 tinyint smallint mediumint int bigint 整型的unsigned代表無(wú)符號(hào),zerofill代表0填充,M代表寬度(在0填充) 浮點(diǎn)型/定點(diǎn)型 float(M,D) unsigned Mà精度,即總位數(shù),D代表小數(shù)位 decimal比f(wàn)loat更精確。 字符型Char(M)定長(zhǎng),可存儲(chǔ)的字符數(shù),M<=255Varchar(M) ,變長(zhǎng),可存儲(chǔ)的字節(jié)數(shù),M<=65535Char與varchar的不同點(diǎn)Char(M),實(shí)占M個(gè)字符,不夠M個(gè)右側(cè)補(bǔ)空格,取出時(shí),在去除右側(cè)空格,導(dǎo)致右側(cè)真有空格時(shí)會(huì)丟失。V

8、archar(M) ,有1-2個(gè)字節(jié)來(lái)標(biāo)記真實(shí)的長(zhǎng)度,日期時(shí)間型 Year 1901-2155,如果輸2位,00-69之間+2000,70-99之間+1900Date YYYY-MM-DD,范圍在1000-01-01à9999-12-31Time HH :ii:ss,范圍在-838:59:59à838:59:59Datetime YY-MM-DD HH:ii:ss 1000-01-01 00:00:00à9999-12-31 23:59:59開(kāi)發(fā)中的一個(gè)問(wèn)題精確到秒的時(shí)間表示方式,不是用datetime,而是用int來(lái)表示時(shí)間戳用時(shí)間戳方便計(jì)算,而且方便格式化成不

9、同的顯示樣式。建表語(yǔ)句Create table 表明( 列名稱(chēng) ,列類(lèi)型列屬性默認(rèn)值,.)engine 引擎名 charset 字符集增:insert答:往哪張表增,增那幾列,各為什么值?Insert into 表名(列1,列2,.列N)Values(值1,值2.值N)*如果不聲明插入的列,則默認(rèn)插入所有列。改:update答:修改哪張表,修改那幾列,修改成什么值?在哪幾行上生效?Update表名Set列1 = 值1,列2 = 值2,. 列N =值NWhere 表達(dá)式;刪:delete刪除哪張表的數(shù)據(jù),刪除哪些行?Delete from 表名Where 表達(dá)式查:select * from 表

10、名查詢(xún)的五種語(yǔ)句:where,group,having,order by,limit一 Where 條件查詢(xún)比較運(yùn)算符1. In <值1,值2,值3.值N>,等于1àN任意一個(gè)。例:select goods_id from goods where cat_id in(4,5);2. Between 值1 and 值2,表示在值1和值2之間例:select goods_id from goods where cat_id between 1 and 5;邏輯運(yùn)算符1. Not 邏輯非例:select good_id from goods where cat_id not i

11、n(4,5);2. Or 邏輯或3. And 邏輯與模糊查詢(xún):案例:想查找諾基亞開(kāi)頭的所有商品Likeà像,% à 通配任意字符 _ à單個(gè)字符Select goods_id from goods where goods_name like 諾基亞%;Select goods_id from goods where goods_name like 諾基亞_;二 Group分組查詢(xún)Group by作用:把 行按 字段分組語(yǔ)法: group by col1,col2colN運(yùn)用場(chǎng)合:常見(jiàn)于統(tǒng)計(jì)場(chǎng)合,如按欄目計(jì)算帖子數(shù),統(tǒng)計(jì)每個(gè)人的平均成績(jī)等。Group與統(tǒng)計(jì)函數(shù)Max

12、:求最大,min: 求最小,sum:求總和,avg:求平均,count:求總行數(shù)練習(xí):三 Having*例題:只用一個(gè)select,不用子查詢(xún)和左連接。四 Order byOrder by 排序功能接一個(gè)或多個(gè)字段對(duì)查詢(xún)結(jié)果進(jìn)行排序知識(shí)點(diǎn)在本項(xiàng)目案例的運(yùn)用對(duì)欄目的商品按價(jià)格由高到低或由低到高排序知識(shí)點(diǎn)的運(yùn)用場(chǎng)合描述各種排序場(chǎng)合,如取熱點(diǎn)新聞,發(fā)帖狀元等。多重排序:Limit在語(yǔ)句的最后起到了限制條目的作用。Limit offset,N offset:偏移量,N:條目;如果不寫(xiě),則從頭開(kāi)始寫(xiě)。即:limit 0,N;Truncate table清空表思考:取出每個(gè)欄目下最貴的商品解法一:首先建個(gè)

13、臨時(shí)表g2,將goods表導(dǎo)入g2,此時(shí),g2中每個(gè)欄目的第一個(gè)goods_id就是該欄目下最貴的那個(gè),再取出每個(gè)欄目下的第一個(gè)。解法二:思想類(lèi)似解法一,將select后的結(jié)果看作是一張表。五 良好的理解模型1 Where 表達(dá)式:把表達(dá)式放在行中,看表達(dá)式是否為真,2 列:理解成變量,可以運(yùn)算3 取出結(jié)果:可以理解成一張臨時(shí)表六 子查詢(xún)1. Where型子查詢(xún)2. From型子查詢(xún)3. Exist型子查詢(xún)一 Where型子查詢(xún)是指把內(nèi)層的查詢(xún)結(jié)果作為外層查詢(xún)的比較條件。二 From型子查詢(xún)把內(nèi)層的查詢(xún)結(jié)果當(dāng)成表供外層繼續(xù)查詢(xún)使用了from + where子查詢(xún)。三 Exists子查詢(xún)把外層的

14、查詢(xún)結(jié)果拿到內(nèi)層,看內(nèi)層的查詢(xún)是否成立。階段總結(jié)二查selectWhere 表達(dá)式表達(dá)式在哪一行成立,哪一行就取出來(lái)=,!=/<>,>,<,>=,<=,in,between and,or,notGroup by分組,一般和統(tǒng)計(jì)函數(shù)配合使用Max,min,avg,sum,countHaving數(shù)據(jù)在表中,表在硬盤(pán)或內(nèi)存以文件形式存在Where就是針對(duì)表文件發(fā)揮作用的查詢(xún)的結(jié)果,也可以看成一張表,其文件一般臨時(shí)存在緩沖區(qū)針對(duì)查詢(xún)的結(jié)果發(fā)揮作用Order by作用:排序可以針對(duì)字段,升序【asc】,降序【desc】。有可能一個(gè)字段拍不出結(jié)果,可以選用其他字段繼續(xù)排

15、列Limit 限制條目Limit【offset】【N】Offset:偏移量N:取出條目,取出3-5條,limit2,3.子查詢(xún)Where型,內(nèi)層的查詢(xún)結(jié)果作為外層查詢(xún)的比較條件From型子查詢(xún)把內(nèi)層的查詢(xún)結(jié)果供外層再次查詢(xún)注意:內(nèi)層的查詢(xún)結(jié)果看成臨時(shí)表,加as臨時(shí)表名Exists型子查詢(xún)把外層的查詢(xún)結(jié)果帶入到內(nèi)層,看內(nèi)層是否成立。Union:聯(lián)合作用:把兩次或多次查詢(xún)結(jié)果合并要求:兩次查詢(xún)的列數(shù)一致。推薦:查詢(xún)的每一列,相對(duì)應(yīng)的列類(lèi)型也一樣??梢詠?lái)自于多張表。多條sql語(yǔ)句union后的列名以第一個(gè)sql語(yǔ)句的列名為準(zhǔn)。例:利用from型子查詢(xún),并配合sum聚合函數(shù)來(lái)實(shí)現(xiàn)。如果不同的語(yǔ)句取出的

16、行,有完全相同,(每個(gè)列的值都相同)那么相同的行將會(huì)合并(去重復(fù))如果不去重復(fù),可以加all。如果子句中有order by,limit,需加()。推薦排序放到所有子句之后,即對(duì)最終合并的結(jié)果進(jìn)行排序。在子句中,order by 配合limit使用才有意義。不配合limit使用,會(huì)被語(yǔ)法分析器優(yōu)化分析時(shí),去除。連接查詢(xún)概念與左連接語(yǔ)法子查詢(xún)就是在原有的查詢(xún)語(yǔ)句中,嵌入新的查詢(xún),來(lái)得到我們想要的結(jié)果集。一般根據(jù)子查詢(xún)的嵌入位置分為,where型子查詢(xún),from型子查詢(xún)。學(xué)習(xí)內(nèi)容 左連接,右連接,內(nèi)連接作用:從兩張或多張表中取出相關(guān)聯(lián)的數(shù)據(jù)應(yīng)用案例:非常廣泛。如取文章及其所在欄目名稱(chēng)去個(gè)人信息及其所

17、發(fā)布的文章等。數(shù)據(jù)庫(kù)中以表為單位存儲(chǔ)數(shù)據(jù)。左連接以左表為準(zhǔn),去右表找匹配數(shù)據(jù),找不到匹配,用null補(bǔ)齊右連接內(nèi)連接如何記憶:1. 左右連接可以相互轉(zhuǎn)化2. 推薦將右連接轉(zhuǎn)化為左連接,兼容性好一些3. 內(nèi)連接:查詢(xún)左右表都有的數(shù)據(jù),即:不要左右連接中null的那一部分,是左右連接的交集。思考:能否查出左右連接的并集呢?目前不能,目前的mysql不支持外連接??梢允褂胾nion來(lái)達(dá)到目的。三表連接面試題:回顧建表語(yǔ)句:Create table 表名(列名稱(chēng) 列類(lèi)型列屬性默認(rèn)值,à列聲明列名稱(chēng) 列類(lèi)型列屬性默認(rèn)值,列名稱(chēng) 列類(lèi)型列屬性默認(rèn)值,列名稱(chēng) 列類(lèi)型列屬性默認(rèn)值,)charset

18、= utf8/gbk表增加列,修改列,刪除列增加列:Alter table 表名 add 列聲明增加的 列默認(rèn)在表的最后一列可以用after來(lái)聲明新增的列在那一列后面。After table 表名 add 列聲明 after .如果新增放在最前面?After table 表名 add 列聲明 first修改列:After table 表名 change 舊列名 列聲明刪除列:Alter table 表名 drop 列名視圖:view查詢(xún)每個(gè)欄目下最貴的商品àSelect goods_id,goods_name,cat_id,shop_price from goods order by

19、 cat_id asc shop_price desc;查詢(xún)結(jié)果當(dāng)成一張表看,如果某個(gè)查詢(xún)結(jié)果出現(xiàn)的非常頻繁,也就是拿這個(gè)結(jié)果當(dāng)作子查詢(xún)出現(xiàn)的非常頻繁Create table g2 like goods;Insert into g2 select上面兩句是想保存一個(gè)查詢(xún)結(jié)果到表里面,供其他查詢(xún)用視圖的定義:視圖是有查詢(xún)結(jié)果形成的一張?zhí)摂M表,視圖的創(chuàng)建語(yǔ)法: Create view 視圖名 select 語(yǔ)句;為什么要視圖?答:1. 可以簡(jiǎn)化查詢(xún),某一個(gè)復(fù)雜的查詢(xún),翻來(lái)覆去的查。簡(jiǎn)化查詢(xún)的例子:2. 進(jìn)行權(quán)限控制把表的權(quán)限封閉,但是開(kāi)放相應(yīng)的視圖權(quán)限,視圖里只開(kāi)放部分?jǐn)?shù)據(jù)。3. 大數(shù)據(jù)分表時(shí)可以

20、用到比如,表的行數(shù)超過(guò)200萬(wàn)時(shí),就會(huì)變慢可以把一張表的數(shù)據(jù)拆成四張表來(lái)存放比如:News表Newsid,1,2,3,4News1,news2,news3,news4表把一張表的數(shù)據(jù)分散到四張表里,分散的方法有很多,最常用的可以用id取模來(lái)計(jì)算(把數(shù)據(jù)均勻的分到幾張表里)Id%4+1 =1,2,3,4比如$_GETid = 17, 17%4+1 = 2,$tableName = news.2Select * from news2 where id =17;還可以用視圖,把四張表形成一張視圖Create view news as select from news2 union.視圖的刪除:Dro

21、p view;視圖的修改:Alter view as select 視圖與表的關(guān)系:視圖的數(shù)據(jù)來(lái)源于表,若表的數(shù)據(jù)改變,則視圖的數(shù)據(jù)自動(dòng)改變。是表的查詢(xún)結(jié)果。修改視圖的數(shù)據(jù)時(shí),表的數(shù)據(jù)也會(huì)跟著修改。但是視圖也并不總是增刪改的,視圖的數(shù)據(jù)與表的數(shù)據(jù)有嚴(yán)格的一一對(duì)應(yīng)時(shí),可以修改。對(duì)于insert還應(yīng)注意,視圖必須包含表中沒(méi)有默認(rèn)值的列視圖的算法algorithmAlgorithm = merge/temptable/underfinedMerge:當(dāng)引用視圖時(shí),引用視圖的語(yǔ)句與定義視圖的語(yǔ)句合并Temptable:當(dāng)引用視圖時(shí),根據(jù)視圖的創(chuàng)建語(yǔ)句建立一個(gè)臨時(shí)表Underfined:未定義,Merg

22、e意味著視圖只是一個(gè)規(guī)則,語(yǔ)句規(guī)則,當(dāng)查詢(xún)視圖時(shí),把查詢(xún)視圖的語(yǔ)句與創(chuàng)建時(shí)的語(yǔ)句等合并,分析,形成一條語(yǔ)句。而temptable是根據(jù)創(chuàng)建語(yǔ)句瞬間創(chuàng)建一張臨時(shí)表,然后查詢(xún)視圖的語(yǔ)句從該臨時(shí)表查數(shù)據(jù)。字符集字符集與校對(duì)集Create table 表名(列聲明)charset utf8;mysql 的字符集設(shè)置非常靈活可以設(shè)置服務(wù)器默認(rèn)字符集數(shù)據(jù)庫(kù)默認(rèn)字符集表默認(rèn)字符集列字符集如果某一個(gè)級(jí)別沒(méi)有指定字符集,則繼承上一級(jí),以表聲明utf8為例:存儲(chǔ)的數(shù)據(jù)在表中,最終是utf8;1. 告訴服務(wù)器,我發(fā)送的數(shù)據(jù)是什么編碼的。character_set_client2. 告訴轉(zhuǎn)換器,轉(zhuǎn)換成什么編碼的cha

23、racter_set_connection3. 查詢(xún)的結(jié)果用什么編碼character_set_results如果以上三者都為字符集N,則可以簡(jiǎn)寫(xiě)為Set names N;推論:什么時(shí)候會(huì)亂碼?1. Client聲明與事實(shí)不符2. Result與客戶(hù)端頁(yè)面不符的時(shí)候什么時(shí)間將會(huì)丟失數(shù)據(jù)?校對(duì)集:字符集的排序規(guī)則一個(gè)字符集可以有一個(gè)或者多個(gè)排序規(guī)則Utf8默認(rèn)utf8_general_ci不區(qū)分大小寫(xiě)階段總結(jié)(三)Union的用法合并查詢(xún)的結(jié)果,取select結(jié)果的并集對(duì)于重復(fù)的行去掉,如果不去重復(fù),可以用union allUnion的要求:各select查出的列數(shù)一致如果子句中用了order

24、by limit那么子句要用小括號(hào)()抱起來(lái)如果子句只用order by 沒(méi)有l(wèi)imitOrderby被優(yōu)化掉,不起作用左連接、右連接、內(nèi)連接Select ta.列,tb.列Ta left/right/inner join tbOn ta.列 = tb.列 (關(guān)系不一定是等于)Where左連接與右連接:可以相互轉(zhuǎn)化A left b à b right a內(nèi)連接:inner join左右連接的交集,兩張表能相互匹配上的行表的管理à列的增刪改給表增加列:Alter table 表名add 列聲明after/first修改表的列:Alter table 表名 change 待修改

25、列名 列聲明 刪除別的列: Alter table 表名 drop 列名視圖 view視圖是一張?zhí)摂M的表,沒(méi)有真實(shí)的數(shù)據(jù)存在,只是一張與表的一種查詢(xún)產(chǎn)生的關(guān)系。語(yǔ)法:Create algorithm = merge/temptable/underfined view viewname as select.;Merge是將創(chuàng)建視圖時(shí)的語(yǔ)句和查詢(xún)視圖的語(yǔ)句合并成一條語(yǔ)句。Temptable:是創(chuàng)建一張臨時(shí)表,merge是一條語(yǔ)句,用的時(shí)候較多。字符集和校對(duì)集客戶(hù)端【轉(zhuǎn)換器】-服務(wù)器客戶(hù)端使用的字符集:set character_set_client = gbk/utf8轉(zhuǎn)換器轉(zhuǎn)換后的字符集:set

26、 character_set_connection = gbk/utf8返回給客戶(hù)端的字符集:set character_set_results = gbk/utf8總和:set names gbk/utf8;校對(duì)集:就是對(duì)排序的規(guī)則;一種字符集對(duì)應(yīng)一種或多種校對(duì)集;Create table()charset utf8;觸發(fā)器:學(xué)習(xí)目標(biāo):觸發(fā)器的定義:觸發(fā)器的應(yīng)用場(chǎng)合:掌握觸發(fā)器的創(chuàng)建語(yǔ)法:會(huì)創(chuàng)建簡(jiǎn)單的觸發(fā)器:1. 觸發(fā)器:trigger,(槍擊,扳機(jī),引線)見(jiàn)識(shí)某種情況,并觸發(fā)某種操作。能監(jiān)視增刪改,觸發(fā)操作:增刪改2. 當(dāng)向一張表中添加或刪除記錄時(shí),需要在相關(guān)表中進(jìn)行同步操作。比如:當(dāng)一個(gè)

27、訂單產(chǎn)生時(shí),訂單所購(gòu)的商品的庫(kù)存量相應(yīng)減少。當(dāng)表上某列數(shù)據(jù)的值與其他表中的數(shù)據(jù)有聯(lián)系時(shí)。比如:當(dāng)某客戶(hù)進(jìn)行欠款消費(fèi),可以在生成訂單時(shí)通過(guò)設(shè)計(jì)觸發(fā)器判斷該客戶(hù)的累計(jì)欠款是否超過(guò)了最大限度。當(dāng)需要對(duì)某張表進(jìn)行跟蹤時(shí)。比如:當(dāng)有新訂單產(chǎn)生時(shí),需要及時(shí)通知相關(guān)人員進(jìn)行處理,此時(shí)可以在訂單表上設(shè)計(jì)添加觸發(fā)器加以實(shí)現(xiàn)。3. 監(jiān)視地點(diǎn):table,監(jiān)視事件:insert/update/delete,觸發(fā)時(shí)間:after/before,觸發(fā)事件:insert/update/delete首先需要修改:Delimiter $,遇到$結(jié)束語(yǔ)句開(kāi)始執(zhí)行。創(chuàng)建觸發(fā)器語(yǔ)法:Create trigger triggerNa

28、meAfter/before insert/update/delete on 表名For each rowBeginSql語(yǔ)句End刪除觸發(fā)器的語(yǔ)法: Drop trigger triggerName如何在觸發(fā)器中引用行的值,對(duì)于insert而言,新增的行用new來(lái)表示,行中的每一列的值,用new.列名來(lái)表示。 對(duì)于delete來(lái)說(shuō),原本有一行,后來(lái)被刪除想引用被刪除的這一行,用old來(lái)表示,old列名就可以引用被刪行中的值。對(duì)于update來(lái)說(shuō),原本有一行,修改后還是那一行,修改前的數(shù)據(jù)用old來(lái)表示,old列名引用被修改之前行中的值,修改后的數(shù)據(jù)用new來(lái)表示,new列名引用被修改之前前行

29、中的值,例:刪除一個(gè)訂單,庫(kù)存量相應(yīng)增加修改訂單的數(shù)量時(shí),庫(kù)存相應(yīng)改變這里只是修改了訂單的數(shù)量,若也要修改gid,即訂單商品類(lèi)別,則需要修改觸發(fā)器:觸發(fā)器里after和before的區(qū)別After是先完成數(shù)據(jù)的增刪改,再觸發(fā),觸發(fā)中的語(yǔ)句晚于增刪改,不能對(duì)前面的增刪改產(chǎn)生影響B(tài)efore是先完成觸發(fā),再增刪改,觸發(fā)的語(yǔ)句先于監(jiān)視增刪改,我們有機(jī)會(huì)判斷,修改即將發(fā)生的操作典型案例:對(duì)于所下訂單進(jìn)行判斷,如果訂單數(shù)量>5就是認(rèn)為惡意訂單,強(qiáng)制把所訂的商品數(shù)量改成5查看所有的觸發(fā)器Show triggers;存儲(chǔ)引擎表里的數(shù)據(jù)存儲(chǔ)在硬盤(pán)上,具體是如何存儲(chǔ)的?存儲(chǔ)的方式有很多,同樣的一張表的數(shù)據(jù)

30、對(duì)于用戶(hù)來(lái)說(shuō),無(wú)論什么樣的存儲(chǔ)引擎,用戶(hù)看到的數(shù)據(jù)是一樣的,對(duì)于服務(wù)器來(lái)說(shuō)是不同的。數(shù)據(jù)庫(kù)對(duì)同樣的數(shù)據(jù),有不同的存儲(chǔ)方式和管理方式,在mysql中,稱(chēng)為存儲(chǔ)引擎。常用的表的引擎有myisam和innodbMyisam:批量插入速度快,不支持事務(wù),鎖表innoDB:批量插入速度相對(duì)較慢,支持事務(wù),鎖行。全文索引,目前mysql5.5都已經(jīng)支持。討論innoDB支持事務(wù),myisam不支持事務(wù)。事務(wù):事務(wù)的acid特性通俗的說(shuō),一組操作要么都成功執(zhí)行,要么都不執(zhí)行。à原子性(atomicity)在所有操作都沒(méi)有執(zhí)行完畢之前,其他會(huì)話不能夠看到中間改變的過(guò)程。à隔離性(isola

31、tion)事務(wù)發(fā)生之前和發(fā)生之后數(shù)據(jù)的總額依然匹配。à一致性(consistency)事務(wù)產(chǎn)生的影響不能夠撤銷(xiāo)à持久性(durability)如果出現(xiàn)了錯(cuò)誤,事務(wù)也不允許撤銷(xiāo),只能夠”補(bǔ)償事務(wù)”原子性體現(xiàn)的是不可分割性,不可見(jiàn)性。轉(zhuǎn)賬李三 à支出500,李三-500趙四 à收到500,趙四+500關(guān)于事務(wù)的引擎:選用innoDB/bdb查看mysql 服務(wù)器的模式:Show variables like zmodez;語(yǔ)法:開(kāi)啟事務(wù):SqlSqlCommit提交/rollback回滾注意:當(dāng)一個(gè)事務(wù)commit或者roolback之后,事務(wù)就已經(jīng)結(jié)束。只要事務(wù)沒(méi)有提交或回滾,事務(wù)處理都會(huì)看不見(jiàn).事物的基本原理(了解)數(shù)據(jù)庫(kù)的備份和恢復(fù)Mysql索引設(shè)有N條隨機(jī)記錄,不用索引,平均查找N/2次,那么用了索引之后?Btree索引,Log2NHash索引,1索引與優(yōu)化之索引的

溫馨提示

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

評(píng)論

0/150

提交評(píng)論