版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
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-128127
0255
Smallint2-3276832767
065535
Mediumint3-2-232123T
02124T
Int4-2^312131T
02132T
Bigint8-2飛32163T
02"64-1
通過(guò)占用字節(jié)和所存范圍分關(guān)系合理的選擇類(lèi)型。
例:Tinyint
經(jīng)測(cè)試,Tinyint的默認(rèn)為有符號(hào)-128?127之間,當(dāng)越界時(shí)自動(dòng)
取相應(yīng)的邊界值。若要存0~255無(wú)符號(hào)時(shí):
列的可選屬性:
Tinyint(M)unsignedzerofill.
M:寬度(在。填充的時(shí)候才有意義)
Unsigned:無(wú)符號(hào)類(lèi)型(非負(fù)),影響存儲(chǔ)范圍
Zerofill:0填充(默認(rèn)無(wú)符號(hào))
列可以聲明默認(rèn)值,而且推薦聲明默認(rèn)值notnulldefault0;
二.小數(shù)型/浮點(diǎn)型、定點(diǎn)型
Float(M,D):M代表總位數(shù),D代表小數(shù)位
(6,2)為例:-9999.99->9999.99
Decimal(D,M):
三.字符型列
Char:定長(zhǎng),char(M),M代表寬度,即:可容納的字符數(shù)(K=M<=255
Varchar:變長(zhǎng),0<=M<=65535(約2W—6W個(gè)字符受字符集影響)
Text文本串,(約2W—6W個(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ì)丟失。而變長(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”表示2000—2069,
如果輸入兩位“70—99”表示1970—1999
如果記得麻煩,輸入四位就行了、
2.Date類(lèi)型:典型格式,1992-08T2
'1000-01-01''9999-12-3T
3.Time類(lèi)型,典型格式hh:mm:ss
'-838:59:59''+838:59:59'
4.Datetime典型格式:'1989-05-0612:23:34'
41000-01-0100:00:00,(9999-12-3123:59:59'
注意:
在開(kāi)發(fā)中很少使用日期時(shí)間類(lèi)型來(lái)表示一個(gè)需要精確到秒的
歹U,原因:雖然日期時(shí)間類(lèi)型能夠精確到秒,而且方便查看。
但是計(jì)算不便。用時(shí)間戳來(lái)表示。
時(shí)間戳:1970-01-0100:00:00到當(dāng)前的秒數(shù)
面試1:
當(dāng)表示性別時(shí),可用1或。表示男女,如,
可能會(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ù)的刪除。
階段總結(jié)(-)
列類(lèi)型的概念
數(shù)值型
整型tinyintsmallintmediumintintbigint
整型的unsigned代表無(wú)符號(hào),zerofill代表0填充,
M代表寬度(在0填充)
浮點(diǎn)型/定點(diǎn)型float(M,D)unsignedM精度,即總位
數(shù),D代表小數(shù)位decimal比f(wàn)loat更精確。
字符型
Char(M)定長(zhǎng),可存儲(chǔ)的字符數(shù),M<=255
Varchar(M),變長(zhǎng),可存儲(chǔ)的字節(jié)數(shù),M<=65535
Char及varchar的不同點(diǎn)
Char(M),實(shí)占M個(gè)字符,不夠M個(gè)右側(cè)補(bǔ)空格,取出時(shí),在去除
右側(cè)空格,導(dǎo)致右側(cè)真有空格時(shí)會(huì)丟失。
Varchar(M),有卜2個(gè)字節(jié)來(lái)標(biāo)記真實(shí)的長(zhǎng)度,
日期時(shí)間型
Year1901-2155,如果輸2位,'00-69'之間+2000「70-99'
之間+1900
DateYYYY-MM-DD,范圍在1000-01-019999-12-31
TimeHH:ii:ss,范圍在-838:59:59838:59:59
DatetimeYY-MM-DDHH:ii:ss1000-01-01
00:00:009999-12-3123:59:59
開(kāi)發(fā)中的一個(gè)問(wèn)題一精確到秒的時(shí)間表示方式,不是用
datetime,而是用int來(lái)表示時(shí)間戳
用時(shí)間戳方便計(jì)算,而且方便格式化成不同的顯示樣式。
建表語(yǔ)句
Createtable表明(
列名稱(chēng),列類(lèi)型[列屬性][默認(rèn)值],
)engine引擎名charset字符集
增:insert
答:往哪張表增,增那幾列,各為什么值?
Insertinto表名
(列1,列2,..列N)
Values
(值1,值2..值N)
**如果不聲明插入的列,則默認(rèn)插入所有列。
改:update
答:修改哪張表,修改那幾列,修改成什么值?在哪幾行
上生效?
Update表名
Set
列1=值1,
列2=值2,
歹UN=值N
Where表達(dá)式;
刪:delete
刪除哪張表的數(shù)據(jù),刪除哪些行?
Deletefrom表名
Where表達(dá)式
查:select*from表名
查詢(xún)的五種語(yǔ)句:where,group,having,orderby,limit
一.Where條件查詢(xún)
比較運(yùn)算符
1.In〈值1,值2,值3…..值N〉,等于1N任意一個(gè)。
例:selectgoods_idfromgoodswherecat_idin(4,5);
2.Between值1and值2,表示在值1和值2之間
例:selectgoods_idfromgoodswherecatidbetween
1and5;
邏輯運(yùn)算符
1.Not邏輯非
例:selectgood_idfromgoodswherecat_idnot
in(4,5);
2.Or邏輯或
3.And邏輯及
模糊查詢(xún):
案例:想查找‘諾基亞'開(kāi)頭的所有商品
Like像,%通配任意字符_單個(gè)字符
Selectgoods_idfromgoodswheregoods_namelike'諾基
亞%';
Selectgoodsidfromgoodswheregoods_namelike'諾基
亞_';
二.Group分組查詢(xún)
Groupby
作用:把行按字段分組
語(yǔ)法:groupbycoll,col2…colN
運(yùn)用場(chǎng)合:常見(jiàn)于統(tǒng)計(jì)場(chǎng)合,如按欄目計(jì)算帖子數(shù),統(tǒng)計(jì)
每個(gè)人的平均成績(jī)等。
Group及統(tǒng)計(jì)函數(shù)
Max:求最大,
min:求最小,
sum:求總和,
avg:求平均,
count:求總行數(shù)
練習(xí):
三.Having
*******例題:
只用一個(gè)select,不用子查詢(xún)和左連接。
四.Orderby
Orderby排序功能
接一個(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ǔ)句的最后起到了限制條目的作用。
Limitoffset,[N]
offset:偏移量,N:條目;如果不寫(xiě),則從頭開(kāi)始寫(xiě)。即:limit
0,N;
Truncatetable清空表
思考:取出每個(gè)欄目下最貴的商品
解法一:
首先建個(gè)臨時(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.歹U:理解成變量,可以運(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)
把外層的查詢(xún)結(jié)果拿到內(nèi)層,看內(nèi)層的查詢(xún)是否
成立。
階段總結(jié)二
查select
Where表達(dá)式
表達(dá)式在哪一行成立,哪一行就取出來(lái)
=,\-/<>,>,<,>=,<=,in,betweenand,or,not
Groupby
分組,一般和統(tǒng)計(jì)函數(shù)配合使用
Max,min,avg,sum,count
Having
數(shù)據(jù)在表中,表在硬盤(pán)或內(nèi)存以文件形式存在
Where就是針對(duì)表文件發(fā)揮作用的
查詢(xún)的結(jié)果,也可以看成一張表,其文件一般臨時(shí)存在緩沖區(qū)
針對(duì)查詢(xún)的結(jié)果發(fā)揮作用
Orderby
作用:排序
可以針對(duì)字段,升序[asc],降序【desc】。
有可能一個(gè)字段拍不出結(jié)果,可以選用其他字段繼續(xù)排列
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ǔ)句取出的行,有完全相同,(每個(gè)列的值都相同)
那么相同的行將會(huì)合并(去重復(fù))
如果不去重復(fù),可以加all。
如果子句中有orderby,limit,需加()。
推薦排序放到所有子句之后,即對(duì)最終合并的結(jié)果進(jìn)行排序。
在子句中,orderby配合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è)人信息及其所發(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ǔ)句:
Createtable表名(
列名稱(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=utf8/gbk…
表增加列,修改列,刪除列
增加列:
Altertable表名add列聲明
增加的列默認(rèn)在表的最后一列
可以用after來(lái)聲明新增的列在那一列后面。
Aftertable表名add列聲明after..
如果新增放在最前面?
Aftertable表名add列聲明first
修改列:
Aftertable表名change舊列名列聲明
刪除列:
Altertable表名drop列名
視圖:view
查詢(xún)每個(gè)欄目下最貴的商品
Selectgoods_id,goods_name,cat_id,shop_pricefrom
goodsorderbycat_idascshop_pricedesc;
查詢(xún)結(jié)果當(dāng)成一張表看,
如果某個(gè)查詢(xún)結(jié)果出現(xiàn)的非常頻繁,也就是拿這個(gè)結(jié)果當(dāng)作
子查詢(xún)出現(xiàn)的非常頻繁
Createtableg2likegoods;
Insertintog2select...
上面兩句是想保存一個(gè)查詢(xún)結(jié)果到表里面,供其他查詢(xún)用
視圖的定義:
視圖是有查詢(xún)結(jié)果形成的一張?zhí)摂M表,
視圖的創(chuàng)建語(yǔ)法:
Createview視圖名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í)可以用到
比如,表的行數(shù)超過(guò)200萬(wàn)時(shí),就會(huì)變慢
可以把一張表的數(shù)據(jù)拆成四張表來(lái)存放
比如:News表
Newsid,1,2,3,4
Newsl,news2,news3,news4表
把一張表的數(shù)據(jù)分散到四張表里,分散的方法有很多,最常
用的可以用id取模來(lái)計(jì)算(把數(shù)據(jù)均勻的分到幾張表里)
Id%4+1=[1,2,3,4]
比如$_GET['id']=17,17%4+1=2,$tabieName=
'news'.'2'
Select*fromnews2whereid=17;
還可以用視圖,把四張表形成一張視圖
Createviewnewsasselectfromnews2union….
視圖的刪除:
Dropview;
視圖的修改:
Alterviewasselect…
視圖及表的關(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)值的列
視圖的算法algorithm
Algorithm=merge/temptable/underfined
Merge:當(dāng)引用視圖時(shí),引用視圖的語(yǔ)句及定義視圖的語(yǔ)句合
并
Temptable:當(dāng)引用視圖時(shí),根據(jù)視圖的創(chuàng)建語(yǔ)句建立一個(gè)臨
時(shí)表
Underfined:未定義,
Merge意味著視圖只是一個(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ì)集
Createtable表名(
列聲明
)charsetutf8;
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_client
2.告訴轉(zhuǎn)換器,轉(zhuǎn)換成什么編碼的
charactersetconnection
3.查詢(xún)的結(jié)果用什么編碼character_set_results
如果以上三者都為字符集N,則可以簡(jiǎn)寫(xiě)為
SetnamesN;
推論:什么時(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ù),可以用unionall
Union的要求:
各select查出的列數(shù)一致
如果子句中用了orderbylimit
那么子句要用小括號(hào)()抱起來(lái)
如果子句只用orderby沒(méi)有l(wèi)imit
Orderby被優(yōu)化掉,不起作用
左連接、右連接、內(nèi)連接
Selectta.列,tb.列
Taleft/right/innerjointb
011{比列=坨.列(關(guān)系不一定是等于)
Where…
左連接及右連接:
可以相互轉(zhuǎn)化
Aleftbbrighta
內(nèi)連接:innerjoin
左右連接的交集,兩張表能相互匹配上的行
表的管理列的增刪改
給表增加列:
Altertable表名add列聲明[after/first]
修改表的列:
Altertable表名change待修改列名列聲明
刪除別的列:
Altertable表名drop列名
視圖view
視圖是一張?zhí)摂M的表,沒(méi)有真實(shí)的數(shù)據(jù)存在,只是一張及表的一
種查詢(xún)產(chǎn)生的關(guān)系。
語(yǔ)法:
Create[algorithm=merge/temptable/underfined]view
viewnameasselect??,..;
Merge是將創(chuàng)建視圖時(shí)的語(yǔ)句和查詢(xún)視圖的語(yǔ)句合并成一條語(yǔ)
句。
Temptable:是創(chuàng)建一張臨時(shí)表,merge是一條語(yǔ)句,用的時(shí)候
較多。
字符集和校對(duì)集
客戶(hù)端一》【轉(zhuǎn)換器】--》服務(wù)器
客戶(hù)端使用的字符集:setcharacter_set_c1ient=gbk/utf8
轉(zhuǎn)換器轉(zhuǎn)換后的字符集:setcharacter_set_connection=
gbk/utf8
返回給客戶(hù)端的字符集:setcharacter_set_results=
gbk/utf8
總和:setnamesgbk/utf8;
校對(duì)集:就是對(duì)排序的規(guī)則;
一種字符集對(duì)應(yīng)一種或多種校對(duì)集;
Createtable()charsetutf8;
觸發(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ī),引線(xiàn))見(jiàn)識(shí)某種情況,并
觸發(fā)某種操作。能監(jiān)視增刪改,觸發(fā)操作:增刪改
2.當(dāng)向一張表中添加或刪除記錄時(shí),需要在相關(guān)表中進(jìn)行同步
操作。比如:當(dāng)一個(gè)訂單產(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ǔ)法:
CreatetriggertriggerName
After/beforeinsert/update/deleteon表名
Foreachrow
Begin
Sql語(yǔ)句
End
刪除觸發(fā)器的語(yǔ)法:
DroptriggertriggerName
如何在觸發(fā)器中引用行的值,
對(duì)于insert而言,新增的行用new來(lái)表示,行中的每一列的
值,用new.列名來(lái)表示。
對(duì)于delete來(lái)說(shuō),原本有一行,后來(lái)被刪除想引用被刪除的
這一行,用。Id來(lái)表示,old列名就可以引用被刪行中的值。
對(duì)于update來(lái)說(shuō),原本有一行,修改后還是那一行,修改前的
數(shù)據(jù)用old來(lái)表示,old列名引用被修改之前行中的值,修改后
的數(shù)據(jù)用new來(lái)表示,new列名引用被修改之前前行中的值,
例:
刪除一個(gè)訂單,庫(kù)存量相應(yīng)增加
修改訂單的數(shù)量時(shí),庫(kù)存相應(yīng)改變
這里只是修改了訂單的數(shù)量,若也要修改gid,即訂單商品類(lèi)
另U,則需要修改觸發(fā)器:
觸發(fā)器里after和before的區(qū)別
After是先完成數(shù)據(jù)的增刪改,再觸發(fā),觸發(fā)中的語(yǔ)句晚于增
刪改,不能對(duì)前面的增刪改產(chǎn)生影響
Before是先完成觸發(fā),再增刪改,觸發(fā)的語(yǔ)句先于監(jiān)視增刪
改,我們有機(jī)會(huì)判斷,修改即將發(fā)生的操作
典型案例:
對(duì)于所下訂單進(jìn)行判斷,如果訂單數(shù)量>5就是認(rèn)為惡意訂單,
強(qiáng)制把所訂的商品數(shù)量改成5
查看所有的觸發(fā)器
Showtriggers;
存儲(chǔ)引擎
表里的數(shù)據(jù)存儲(chǔ)在硬盤(pán)上,具體是如何存儲(chǔ)的?
存儲(chǔ)的方式有很多,同樣的一張表的數(shù)據(jù)對(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和innodb
Myisam:批量插入速度快,不支持事務(wù),鎖表
innoDB:批量插入速度相對(duì)較慢,支持事務(wù),鎖行。
全文索引,目前mysql5.5都已經(jīng)支持。
討論innoDB支持事務(wù),myisam不支持事務(wù)。
事務(wù):
事務(wù)的acid特性
通俗的說(shuō),一組操作要么都成功執(zhí)行,要么都不執(zhí)行。原
子性(atomicity)
在所有操作都沒(méi)有執(zhí)行完畢之前,其他會(huì)話(huà)不能夠看到中間
改變的過(guò)程。隔離性(isolation)
事務(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ù)器的模式:
Showvariableslike'zmodez’;
語(yǔ)法:
開(kāi)啟事務(wù):
Sql…
Sql…
Commit
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024約定子女探望權(quán)及離婚后財(cái)產(chǎn)分割與子女教育協(xié)議3篇
- 2025年農(nóng)業(yè)科技產(chǎn)品研發(fā)與推廣合同3篇
- 二零二五年度民宿餐飲服務(wù)員勞動(dòng)協(xié)議范本3篇
- 2024年04月新疆興業(yè)銀行烏魯木齊分行春季校園招考筆試歷年參考題庫(kù)附帶答案詳解
- 專(zhuān)業(yè)司機(jī)招聘協(xié)議2024版示例一
- 2025年度廠(chǎng)房租賃合同標(biāo)準(zhǔn)版(含租賃保證金)3篇
- 臨時(shí)崗位:2024政府工作人員協(xié)議版
- 二零二四全新鋼材供應(yīng)鏈居間管理服務(wù)協(xié)議3篇
- 2025年度產(chǎn)業(yè)園區(qū)場(chǎng)商位租賃合作合同4篇
- 2025年農(nóng)膜生產(chǎn)設(shè)備租賃與維修服務(wù)合同3篇
- 申根簽證申請(qǐng)表模板
- 企業(yè)會(huì)計(jì)準(zhǔn)則、應(yīng)用指南及附錄2023年8月
- 諒解書(shū)(標(biāo)準(zhǔn)樣本)
- 2022年浙江省事業(yè)編制招聘考試《計(jì)算機(jī)專(zhuān)業(yè)基礎(chǔ)知識(shí)》真題試卷【1000題】
- 認(rèn)養(yǎng)一頭牛IPO上市招股書(shū)
- GB/T 3767-2016聲學(xué)聲壓法測(cè)定噪聲源聲功率級(jí)和聲能量級(jí)反射面上方近似自由場(chǎng)的工程法
- GB/T 23574-2009金屬切削機(jī)床油霧濃度的測(cè)量方法
- 西班牙語(yǔ)構(gòu)詞.前后綴
- 動(dòng)物生理學(xué)-全套課件(上)
- 河北省衡水市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
- DB32-T 2665-2014機(jī)動(dòng)車(chē)維修費(fèi)用結(jié)算規(guī)范-(高清現(xiàn)行)
評(píng)論
0/150
提交評(píng)論