Mysql

1.

SELECT Customer,SUM(OrderPrice)

FROM Orders

GROUP BY Customer.

2.

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons, Orders

WHERE Persons.Id_P = Orders.Id_P

3.explain

Using temporary 看到這個(gè)的時(shí)候儿惫,查詢需要優(yōu)化了。這里多搀,MYSQL需要?jiǎng)?chuàng)建一個(gè)臨時(shí)表來存儲(chǔ)結(jié)果

Using index: 列數(shù)據(jù)是從僅僅使用了索引中的信息而沒有讀取實(shí)際的行動(dòng)的表返回的谬墙,這發(fā)生在對表的全部的請求列都是同一個(gè)索引的部分的時(shí)候

use filesort orderby 那一行建立索引

索引:(索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)

1.選擇唯一性索引

唯一性索引的值是唯一的郑兴,可以更快速的通過該索引來確定某條記錄。

例如匈子,學(xué)生表中學(xué)號(hào)是具有唯一性的字段续室。為該字段建立唯一性索引可以很快的確定某個(gè)學(xué)生的信息。

如果使用姓名的話匀泊,可能存在同名現(xiàn)象优训,從而降低查詢速度朵你。

2.為經(jīng)常需要排序各聘、分組和聯(lián)合操作的字段建立索引

經(jīng)常需要ORDER BY、GROUP BY抡医、DISTINCT和UNION等操作的字段躲因,排序操作會(huì)浪費(fèi)很多時(shí)間。

如果為其建立索引忌傻,可以有效地避免排序操作大脉。

3.為常作為查詢條件的字段建立索引

如果某個(gè)字段經(jīng)常用來做查詢條件,那么該字段的查詢速度會(huì)影響整個(gè)表的查詢速度水孩。因此镰矿,

為這樣的字段建立索引,可以提高整個(gè)表的查詢速度俘种。

4.限制索引的數(shù)目

索引的數(shù)目不是越多越好秤标。每個(gè)索引都需要占用磁盤空間,索引越多宙刘,需要的磁盤空間就越大苍姜。

修改表時(shí),對索引的重構(gòu)和更新很麻煩悬包。越多的索引衙猪,會(huì)使更新表變得很浪費(fèi)時(shí)間。

5.盡量使用數(shù)據(jù)量少的索引

如果索引的值很長,那么查詢的速度會(huì)受到影響垫释。例如丝格,對一個(gè)CHAR(100)類型的字段進(jìn)行全文

檢索需要的時(shí)間肯定要比對CHAR(10)類型的字段需要的時(shí)間要多。

6.盡量使用前綴來索引

如果索引字段的值很長棵譬,最好使用值的前綴來索引铁追。例如,TEXT和BLOG類型的字段茫船,進(jìn)行全文檢索

會(huì)很浪費(fèi)時(shí)間琅束。如果只檢索字段的前面的若干個(gè)字符,這樣可以提高檢索速度算谈。

7.刪除不再使用或者很少使用的索引

表中的數(shù)據(jù)被大量更新涩禀,或者數(shù)據(jù)的使用方式被改變后,原有的一些索引可能不再需要然眼。數(shù)據(jù)庫管理

員應(yīng)當(dāng)定期找出這些索引艾船,將它們刪除,從而減少索引對更新操作的影響高每。

8.小表不應(yīng)建立索引屿岂;包含大量的列并且不需要搜索非空值的時(shí)候可以考慮不建索引

having:跟在統(tǒng)計(jì)函數(shù)后面

SELECT column_name, aggregate_function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name

HAVING aggregate_function(column_name) operator value

mysql

1:基礎(chǔ)sql語句書寫(一般讓寫關(guān)聯(lián)和子查詢語句)

關(guān)聯(lián):SELECT?*?FROM?score,?student?WHERE?score.id?=?student.id?...

子查詢:where,having鲸匿,group by爷怀,order by,limit

#查詢每個(gè)欄目下價(jià)格最高的

select cat_id,max(goods_price) from goos group by cat_id;

#查出價(jià)格最高的商品編號(hào)

select goods_id,max(goods_price) from goods group by goods_id;

#求每個(gè)欄目的商品平均價(jià)格

select cat_id,avg(goods_price) from goods group by cat_id;

#查詢本店商品價(jià)格比市場價(jià)低多少錢带欢,輸出低200元以上的商品

select goods_id,good_name,market_price - shop_price as s from goods having s>200 ;

//這里不能用where因?yàn)閟是查詢結(jié)果运授,而where只能對表中的字段名篩選

如果用where的話則是:

select goods_id,goods_name from goods where market_price - shop_price > 200;

2:索引的創(chuàng)建,優(yōu)缺點(diǎn)乔煞,最左原則

3:存儲(chǔ)引擎吁朦,常用的幾個(gè),優(yōu)缺點(diǎn)渡贾,差別逗宜,原理(面試必出

4:sql注入的處理方法

5:mysql處理函數(shù)(PHP中封裝的)

連接,預(yù)處理(編譯一次空骚,不同參數(shù)多次執(zhí)行)纺讲,執(zhí)行

6:PDO的使用方法,為什么使用

在php5.3.6之后府怯,pdo不會(huì)在本地對sql進(jìn)行拼接然后將拼接后的sql傳遞給mysql server處理(也就是不會(huì)在本地做轉(zhuǎn)義處理)刻诊。pdo的處理方法是在prepare函數(shù)調(diào)用時(shí),將預(yù)處理好的sql模板(包含占位符)通過mysql協(xié)議傳遞給mysql server牺丙,告訴mysql server模板的結(jié)構(gòu)以及語義则涯。當(dāng)調(diào)用execute時(shí)复局,將兩個(gè)參數(shù)傳遞給mysql server。由mysql server完成變量的轉(zhuǎn)移處理粟判。將sql模板和變量分兩次傳遞亿昏,即解決了sql注入問題。

7:mysql的優(yōu)化档礁,表拆分等

8:事務(wù)處理角钩,sql語句的處理效率等

一系列操作,要么全部成功呻澜,否則會(huì)到操作前

在 MySQL 中只有使用了 Innodb 數(shù)據(jù)庫引擎的數(shù)據(jù)庫或表才支持事務(wù)递礼。

事務(wù)處理可以用來維護(hù)數(shù)據(jù)庫的完整性,保證成批的 SQL 語句要么全部執(zhí)行羹幸,要么全部不執(zhí)行脊髓。

事務(wù)用來管理 insert,update,delete 語句

Atomicity(原子性)、Consistency(穩(wěn)定性)栅受、Isolation(隔離性)将硝、Durability(可靠性)

1、事務(wù)的原子性:一組事務(wù)屏镊,要么成功依疼;要么撤回。

2而芥、穩(wěn)定性 :有非法數(shù)據(jù)(外鍵約束之類)律罢,事務(wù)撤回。

3蔚出、隔離性:事務(wù)獨(dú)立運(yùn)行弟翘。一個(gè)事務(wù)處理后的結(jié)果虫腋,影響了其他事務(wù)骄酗,那么其他事務(wù)會(huì)撤回。事務(wù)的100%隔離悦冀,需要犧牲速度趋翻。

4、可靠性:軟盒蟆、硬件崩潰后踏烙,InnoDB數(shù)據(jù)表驅(qū)動(dòng)會(huì)利用日志文件重構(gòu)修改±龋可靠性和高速度不可兼得讨惩, innodb_flush_log_at_trx_commit 選項(xiàng) 決定什么時(shí)候吧事務(wù)保存到日志里。

9:數(shù)據(jù)表字段的類型寒屯,同類型間的區(qū)別荐捻,改如何選取黍少,int(10)與int(11)的區(qū)別等。

10:數(shù)據(jù)庫索引使用的那種數(shù)據(jù)結(jié)構(gòu)处面,畫出數(shù)據(jù)結(jié)構(gòu)

數(shù)據(jù)庫事務(wù)的隔離級別有4種厂置,由低到高分別為Read uncommitted 、Read committed 魂角、Repeatable read 昵济、Serializable 。而且野揪,在事務(wù)的并發(fā)操作中可能會(huì)出現(xiàn)臟讀访忿,不可重復(fù)讀,幻讀斯稳。下面通過事例一一闡述它們的概念與聯(lián)系醉顽。

Read uncommitted

讀未提交,顧名思義平挑,就是一個(gè)事務(wù)可以讀取另一個(gè)未提交事務(wù)的數(shù)據(jù)游添。

事例:老板要給程序員發(fā)工資,程序員的工資是3.6萬/月通熄。但是發(fā)工資時(shí)老板不小心按錯(cuò)了數(shù)字唆涝,按成3.9萬/月,該錢已經(jīng)打到程序員的戶口唇辨,但是事務(wù)還沒有提交廊酣,就在這時(shí),程序員去查看自己這個(gè)月的工資赏枚,發(fā)現(xiàn)比往常多了3千元亡驰,以為漲工資了非常高興。但是老板及時(shí)發(fā)現(xiàn)了不對饿幅,馬上回滾差點(diǎn)就提交了的事務(wù)凡辱,將數(shù)字改成3.6萬再提交。

分析:實(shí)際程序員這個(gè)月的工資還是3.6萬栗恩,但是程序員看到的是3.9萬透乾。他看到的是老板還沒提交事務(wù)時(shí)的數(shù)據(jù)。這就是臟讀磕秤。

那怎么解決臟讀呢乳乌?Read committed!讀提交市咆,能解決臟讀問題汉操。

Read committed

讀提交,顧名思義蒙兰,就是一個(gè)事務(wù)要等另一個(gè)事務(wù)提交后才能讀取數(shù)據(jù)磷瘤。

事例:程序員拿著信用卡去享受生活(卡里當(dāng)然是只有3.6萬)其弊,當(dāng)他埋單時(shí)(程序員事務(wù)開啟),收費(fèi)系統(tǒng)事先檢測到他的卡里有3.6萬膀斋,就在這個(gè)時(shí)候K蠓ァ!程序員的妻子要把錢全部轉(zhuǎn)出充當(dāng)家用仰担,并提交糊识。當(dāng)收費(fèi)系統(tǒng)準(zhǔn)備扣款時(shí),再檢測卡里的金額摔蓝,發(fā)現(xiàn)已經(jīng)沒錢了(第二次檢測金額當(dāng)然要等待妻子轉(zhuǎn)出金額事務(wù)提交完)赂苗。程序員就會(huì)很郁悶,明明卡里是有錢的…

分析:這就是讀提交贮尉,若有事務(wù)對數(shù)據(jù)進(jìn)行更新(UPDATE)操作時(shí)拌滋,讀操作事務(wù)要等待這個(gè)更新操作事務(wù)提交后才能讀取數(shù)據(jù),可以解決臟讀問題猜谚。但在這個(gè)事例中败砂,出現(xiàn)了一個(gè)事務(wù)范圍內(nèi)兩個(gè)相同的查詢卻返回了不同數(shù)據(jù),這就是不可重復(fù)讀魏铅。

那怎么解決可能的不可重復(fù)讀問題昌犹?Repeatable read !

Repeatable read

重復(fù)讀览芳,就是在開始讀取數(shù)據(jù)(事務(wù)開啟)時(shí)斜姥,不再允許修改操作

事例:程序員拿著信用卡去享受生活(卡里當(dāng)然是只有3.6萬),當(dāng)他埋單時(shí)(事務(wù)開啟沧竟,不允許其他事務(wù)的UPDATE修改操作)铸敏,收費(fèi)系統(tǒng)事先檢測到他的卡里有3.6萬。這個(gè)時(shí)候他的妻子不能轉(zhuǎn)出金額了悟泵。接下來收費(fèi)系統(tǒng)就可以扣款了杈笔。

分析:重復(fù)讀可以解決不可重復(fù)讀問題。寫到這里魁袜,應(yīng)該明白的一點(diǎn)就是桩撮,不可重復(fù)讀對應(yīng)的是修改,即UPDATE操作峰弹。但是可能還會(huì)有幻讀問題。因?yàn)榛米x問題對應(yīng)的是插入INSERT操作芜果,而不是UPDATE操作鞠呈。

什么時(shí)候會(huì)出現(xiàn)幻讀?

事例:程序員某一天去消費(fèi)右钾,花了2千元蚁吝,然后他的妻子去查看他今天的消費(fèi)記錄(全表掃描FTS旱爆,妻子事務(wù)開啟),看到確實(shí)是花了2千元窘茁,就在這個(gè)時(shí)候怀伦,程序員花了1萬買了一部電腦,即新增INSERT了一條消費(fèi)記錄山林,并提交房待。當(dāng)妻子打印程序員的消費(fèi)記錄清單時(shí)(妻子事務(wù)提交),發(fā)現(xiàn)花了1.2萬元驼抹,似乎出現(xiàn)了幻覺桑孩,這就是幻讀。

那怎么解決幻讀問題框冀?Serializable流椒!

Serializable 序列化

Serializable 是最高的事務(wù)隔離級別,在該級別下明也,事務(wù)串行化順序執(zhí)行宣虾,可以避免臟讀、不可重復(fù)讀與幻讀温数。但是這種事務(wù)隔離級別效率低下安岂,比較耗數(shù)據(jù)庫性能,一般不使用帆吻。


共享鎖(S鎖):如果事務(wù)T對數(shù)據(jù)A加上共享鎖后域那,則其他事務(wù)只能對A再加共享鎖,不能加排他鎖猜煮,直到已釋放所有共享鎖次员。獲準(zhǔn)共享鎖的事務(wù)只能讀數(shù)據(jù),不能修改數(shù)據(jù)王带。

排他鎖(X鎖):如果事務(wù)T對數(shù)據(jù)A加上排他鎖后淑蔚,則其他事務(wù)不能再對A加任任何類型的鎖,直到在事務(wù)的末尾將資源上的鎖釋放為止愕撰。獲準(zhǔn)排他鎖的事務(wù)既能讀數(shù)據(jù)刹衫,又能修改數(shù)據(jù)。


數(shù)據(jù)類型

日期和時(shí)間數(shù)據(jù)類型

MySQL數(shù)據(jù)類型含義

date 3字節(jié)搞挣,日期带迟,格式:2014-09-18

time 3字節(jié),時(shí)間囱桨,格式:08:42:30

datetime 8字節(jié)仓犬,日期時(shí)間,格式:2014-09-18 08:42:30

timestamp 4字節(jié)舍肠,自動(dòng)存儲(chǔ)記錄修改的時(shí)間

year 1字節(jié)搀继,年份

數(shù)值數(shù)據(jù)類型

整型

MySQL數(shù)據(jù)類型含義(有符號(hào))

tinyint 1字節(jié)窘面,范圍(-128~127)

smallint 2字節(jié),范圍(-32768~32767)

mediumint 3字節(jié)叽躯,范圍(-8388608~8388607)

int 4字節(jié)财边,范圍(-2147483648~2147483647)

bigint 8字節(jié),范圍(+-9.22*10的18次方)

上面定義的都是有符號(hào)的点骑,當(dāng)然了酣难,也可以加上unsigned關(guān)鍵字,定義成無符號(hào)的類型畔况,那么對應(yīng)的取值范圍就要翻翻了鲸鹦,比如:

tinyint unsigned的取值范圍為0~255。

浮點(diǎn)型

MySQL數(shù)據(jù)類型含義

float(m, d) 4字節(jié)跷跪,單精度浮點(diǎn)型馋嗜,m總個(gè)數(shù),d小數(shù)位

double(m, d) 8字節(jié)吵瞻,雙精度浮點(diǎn)型葛菇,m總個(gè)數(shù),d小數(shù)位

decimal(m, d)decimal是存儲(chǔ)為字符串的浮點(diǎn)數(shù)

我在MySQL中建立了一個(gè)表橡羞,有一列為float(5, 3)眯停;做了以下試驗(yàn):

1.插入123.45678,最后查詢得到的結(jié)果為99.999卿泽;

2.插入123.456莺债,最后查詢結(jié)果為99.999;

3.插入12.34567签夭,最后查詢結(jié)果為12.346齐邦;

所以,在使用浮點(diǎn)型的時(shí)候第租,還是要注意陷阱的措拇,要以插入數(shù)據(jù)庫中的實(shí)際結(jié)果為準(zhǔn)。

字符串?dāng)?shù)據(jù)類型

MySQL數(shù)據(jù)類型含義

char(n)固定長度慎宾,最多255個(gè)字符

varchar(n)可變長度丐吓,最多65535個(gè)字符

tinytext可變長度,最多255個(gè)字符

text可變長度趟据,最多65535個(gè)字符

mediumtext可變長度券犁,最多2的24次方-1個(gè)字符

longtext可變長度,最多2的32次方-1個(gè)字符

1.char(n)和varchar(n)中括號(hào)中n代表字符的個(gè)數(shù)之宿,并不代表字節(jié)個(gè)數(shù)族操,所以當(dāng)使用了中文的時(shí)候(UTF8)意味著可以插入m個(gè)中文,但是實(shí)際會(huì)占用m*3個(gè)字節(jié)比被。

2.同時(shí)char和varchar最大的區(qū)別就在于char不管實(shí)際value都會(huì)占用n個(gè)字符的空間色难,而varchar只會(huì)占用實(shí)際字符應(yīng)該占用的空間+1,并且實(shí)際空間+1<=n等缀。

3.超過char和varchar的n設(shè)置后枷莉,字符串會(huì)被截?cái)唷?/p>

4.char的上限為255字節(jié),varchar的上限65535字節(jié)尺迂,text的上限為65535笤妙。

5.char在存儲(chǔ)的時(shí)候會(huì)截?cái)辔膊康目崭瘢瑅archar和text不會(huì)噪裕。

6.varchar會(huì)使用1-3個(gè)字節(jié)來存儲(chǔ)長度蹲盘,text不會(huì)。

其它類型

1.enum(“member1″, “member2″, … “member65535″)

enum數(shù)據(jù)類型就是定義了一種枚舉膳音,最多包含65535個(gè)不同的成員召衔。當(dāng)定義了一個(gè)enum的列時(shí),該列的值限制為列定義中聲明的值祭陷。如果列聲明包含NULL屬性苍凛,則NULL將被認(rèn)為是一個(gè)有效值,并且是默認(rèn)值兵志。如果聲明了NOT NULL醇蝴,則列表的第一個(gè)成員是默認(rèn)值。

2.set(“member”, “member2″, … “member64″)

set數(shù)據(jù)類型為指定一組預(yù)定義值中的零個(gè)或多個(gè)值提供了一種方法想罕,這組值最多包括64個(gè)成員悠栓。值的選擇限制為列定義中聲明的值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末按价,一起剝皮案震驚了整個(gè)濱河市惭适,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌俘枫,老刑警劉巖腥沽,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鸠蚪,居然都是意外死亡今阳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門茅信,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盾舌,“玉大人,你說我怎么就攤上這事蘸鲸⊙矗” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長膝舅。 經(jīng)常有香客問我嗡载,道長,這世上最難降的妖魔是什么仍稀? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任洼滚,我火速辦了婚禮,結(jié)果婚禮上技潘,老公的妹妹穿的比我還像新娘遥巴。我一直安慰自己,他們只是感情好享幽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布铲掐。 她就那樣靜靜地躺著,像睡著了一般值桩。 火紅的嫁衣襯著肌膚如雪摆霉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天颠毙,我揣著相機(jī)與錄音斯入,去河邊找鬼。 笑死蛀蜜,一個(gè)胖子當(dāng)著我的面吹牛刻两,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滴某,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼磅摹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了霎奢?” 一聲冷哼從身側(cè)響起户誓,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎幕侠,沒想到半個(gè)月后帝美,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晤硕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年悼潭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舞箍。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舰褪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疏橄,到底是詐尸還是另有隱情占拍,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站晃酒,受9級特大地震影響表牢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掖疮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一初茶、第九天 我趴在偏房一處隱蔽的房頂上張望颗祝。 院中可真熱鬧浊闪,春花似錦、人聲如沸螺戳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽倔幼。三九已至盖腿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間损同,已是汗流浹背翩腐。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膏燃,地道東北人茂卦。 一個(gè)月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像组哩,于是被迫代替她去往敵國和親等龙。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容