Mysql復(fù)習(xí)提高

外鍵約束

刪除吕漂,更新時(shí)的四個(gè)選項(xiàng)

  • RESTRICT 當(dāng)有關(guān)聯(lián)數(shù)據(jù)時(shí)贾陷,無(wú)法刪除(立即檢出)
  • NO ACTION 當(dāng)有關(guān)聯(lián)數(shù)據(jù)時(shí)队橙,無(wú)法刪除(延遲檢查)
  • CASCADE 級(jí)聯(lián)的更新候味,父親的id變了孩子的f_id也會(huì)變
  • SETNULL 刪除父親時(shí)抒寂,把兒子變?yōu)閚ull

事務(wù)

數(shù)據(jù)庫(kù)事務(wù)的四個(gè)特性及含義

數(shù)據(jù)庫(kù)事務(wù)transanction正確執(zhí)行的四個(gè)基本要素傲茄。ACID,原子性(Atomicity)毅访、一致性(Correspondence)、隔離性(Isolation)盘榨、持久性(Durability)喻粹。

  • 原子性:整個(gè)事務(wù)中的所有操作,要么全部完成草巡,要么全部不完成守呜,不可能停滯在中間某個(gè)環(huán)節(jié)。事務(wù)在執(zhí)行過(guò)程中發(fā)生錯(cuò)誤,會(huì)被回滾(Rollback)到事務(wù)開(kāi)始前的狀態(tài)弛饭,就像這個(gè)事務(wù)從來(lái)沒(méi)有執(zhí)行過(guò)一樣冕末。
  • 一致性:在事務(wù)開(kāi)始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫(kù)的完整性約束沒(méi)有被破壞侣颂。
  • 隔離性:隔離狀態(tài)執(zhí)行事務(wù)档桃,使它們好像是系統(tǒng)在給定時(shí)間內(nèi)執(zhí)行的唯一操作。如果有兩個(gè)事務(wù)憔晒,運(yùn)行在相同的時(shí)間內(nèi)藻肄,執(zhí)行 相同的功能,事務(wù)的隔離性將確保每一事務(wù)在系統(tǒng)中認(rèn)為只有該事務(wù)在使用系統(tǒng)拒担。這種屬性有時(shí)稱為串行化嘹屯,為了防止事務(wù)操作間的混淆,必須串行化或序列化請(qǐng) 求从撼,使得在同一時(shí)間僅有一個(gè)請(qǐng)求用于同一數(shù)據(jù)州弟。
  • 持久性:在事務(wù)完成以后,該事務(wù)所對(duì)數(shù)據(jù)庫(kù)所作的更改便持久的保存在數(shù)據(jù)庫(kù)之中低零,并不會(huì)被回滾婆翔。

MySQL中InnoDB支持的四種事務(wù)隔離級(jí)別

  • read uncommited:讀取未提交內(nèi)容
  • read committed:讀取提交內(nèi)容
  • repeatable read:可重讀
  • serializable:可串行化
    read Uncommitted(讀取未提交內(nèi)容)
    在該隔離級(jí)別,所有事務(wù)都可以看到其他未提交事務(wù)的執(zhí)行結(jié)果掏婶。本隔離級(jí)別很少用于實(shí)際應(yīng)用啃奴,因?yàn)樗男阅芤膊槐绕渌?jí)別好多少。讀取未提交的數(shù)據(jù)雄妥,也被稱之為臟讀(Dirty Read)最蕾。
    Read Committed(讀取提交內(nèi)容)
    這是大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)的默認(rèn)隔離級(jí)別(但不是MySQL默認(rèn)的)。它滿足了隔離的簡(jiǎn)單定義:一個(gè)事務(wù)只能看見(jiàn)已經(jīng)提交事務(wù)所做的改變老厌。這種隔離級(jí)別也支持所謂的不可重復(fù)讀(Nonrepeatable Read)瘟则,因?yàn)橥皇聞?wù)的其他實(shí)例在該實(shí)例處理其間可能會(huì)有新的commit,所以同一select可能返回不同結(jié)果枝秤。
    Repeatable Read(可重讀)
    這是MySQL的默認(rèn)事務(wù)隔離級(jí)別壹粟,它確保同一事務(wù)的多個(gè)實(shí)例在并發(fā)讀取數(shù)據(jù)時(shí),會(huì)看到同樣的數(shù)據(jù)行宿百。不過(guò)理論上趁仙,這會(huì)導(dǎo)致另一個(gè)棘手的問(wèn)題:幻讀(Phantom Read)。簡(jiǎn)單的說(shuō)垦页,幻讀指當(dāng)用戶讀取某一范圍的數(shù)據(jù)行時(shí)雀费,另一個(gè)事務(wù)又在該范圍內(nèi)插入了新行,當(dāng)用戶再讀取該范圍的數(shù)據(jù)行時(shí)痊焊,會(huì)發(fā)現(xiàn)有新的“幻影” 行盏袄。InnoDB和Falcon存儲(chǔ)引擎通過(guò)多版本并發(fā)控制(MVCC忿峻,Multiversion Concurrency Control 間隙鎖)機(jī)制解決了該問(wèn)題。注:其實(shí)多版本只是解決不可重復(fù)讀問(wèn)題辕羽,而加上間隙鎖(也就是它這里所謂的并發(fā)控制)才解決了幻讀問(wèn)題逛尚。
    Serializable(可串行化)
    這是最高的隔離級(jí)別,它通過(guò)強(qiáng)制事務(wù)排序刁愿,使之不可能相互沖突绰寞,從而解決幻讀問(wèn)題。簡(jiǎn)言之铣口,它是在每個(gè)讀的數(shù)據(jù)行上加上共享鎖滤钱。在這個(gè)級(jí)別,可能導(dǎo)致大量的超時(shí)現(xiàn)象和鎖競(jìng)爭(zhēng)脑题。
    對(duì)于不同的事務(wù)件缸,采用不同的隔離級(jí)別分別有不同的結(jié)果。不同的隔離級(jí)別有不同的現(xiàn)象叔遂。主要有下面

drop,delete與truncate的區(qū)別

drop直接刪掉表 truncate刪除表中數(shù)據(jù)他炊,再插入時(shí)自增長(zhǎng)id又從1開(kāi)始 delete刪除表中數(shù)據(jù),可以加where字句已艰。

(1) DELETE語(yǔ)句執(zhí)行刪除的過(guò)程是每次從表中刪除一行佑稠,并且同時(shí)將該行的刪除操作作為事務(wù)記錄在日志中保存以便進(jìn)行進(jìn)行回滾操作。TRUNCATE TABLE 則一次性地從表中刪除所有的數(shù)據(jù)并不把單獨(dú)的刪除操作記錄記入日志保存旗芬,刪除行是不能恢復(fù)的。并且在刪除的過(guò)程中不會(huì)激活與表有關(guān)的刪除觸發(fā)器捆蜀。執(zhí)行速度快疮丛。

(2) 表和索引所占空間。當(dāng)表被TRUNCATE 后辆它,這個(gè)表和索引所占用的空間會(huì)恢復(fù)到初始大小誊薄,而DELETE操作不會(huì)減少表或索引所占用的空間。drop語(yǔ)句將表所占用的空間全釋放掉锰茉。

(3) 一般而言呢蔫,drop > truncate > delete

(4) 應(yīng)用范圍。TRUNCATE 只能對(duì)TABLE飒筑;DELETE可以是table和view

(5) TRUNCATE 和DELETE只刪除數(shù)據(jù)片吊,而DROP則刪除整個(gè)表(結(jié)構(gòu)和數(shù)據(jù))。

(6) truncate與不帶where的delete :只刪除數(shù)據(jù)协屡,而不刪除表的結(jié)構(gòu)(定義)drop語(yǔ)句將刪除表的結(jié)構(gòu)被依賴的約束(constrain),觸發(fā)器(trigger)索引(index);依賴于該表的存儲(chǔ)過(guò)程/函數(shù)將被保留俏脊,但其狀態(tài)會(huì)變?yōu)椋篿nvalid。

(7) delete語(yǔ)句為DML(data maintain Language),這個(gè)操作會(huì)被放到 rollback segment中,事務(wù)提交后才生效肤晓。如果有相應(yīng)的 tigger,執(zhí)行的時(shí)候?qū)⒈挥|發(fā)爷贫。

(8) truncate认然、drop是DLL(data define language),操作立即生效,原數(shù)據(jù)不放到 rollback segment中漫萄,不能回滾

(9) 在沒(méi)有備份情況下卷员,謹(jǐn)慎使用 drop 與 truncate。要?jiǎng)h除部分?jǐn)?shù)據(jù)行采用delete且注意結(jié)合where來(lái)約束影響范圍腾务”下猓回滾段要足夠大。要?jiǎng)h除表用drop;若想保留表而將表中數(shù)據(jù)刪除窑睁,如果于事務(wù)無(wú)關(guān)挺峡,用truncate即可實(shí)現(xiàn)。如果和事務(wù)有關(guān)担钮,或老師想觸發(fā)trigger,還是用delete橱赠。

(10) Truncate table 表名 速度快,而且效率高,因?yàn)?
truncate table 在功能上與不帶 WHERE 子句的 DELETE 語(yǔ)句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快箫津,且使用的系統(tǒng)和事務(wù)日志資源少狭姨。DELETE 語(yǔ)句每次刪除一行,并在事務(wù)日志中為所刪除的每行記錄一項(xiàng)苏遥。TRUNCATE TABLE 通過(guò)釋放存儲(chǔ)表數(shù)據(jù)所用的數(shù)據(jù)頁(yè)來(lái)刪除數(shù)據(jù)饼拍,并且只在事務(wù)日志中記錄頁(yè)的釋放。

(11) TRUNCATE TABLE 刪除表中的所有行田炭,但表結(jié)構(gòu)及其列师抄、約束、索引等保持不變教硫。新行標(biāo)識(shí)所用的計(jì)數(shù)值重置為該列的種子叨吮。如果想保留標(biāo)識(shí)計(jì)數(shù)值,請(qǐng)改用 DELETE瞬矩。如果要?jiǎng)h除表定義及其數(shù)據(jù)茶鉴,請(qǐng)使用 DROP TABLE 語(yǔ)句。

(12) 對(duì)于由 FOREIGN KEY 約束引用的表景用,不能使用 TRUNCATE TABLE涵叮,而應(yīng)使用不帶 WHERE 子句的 DELETE 語(yǔ)句。由于 TRUNCATE TABLE 不記錄在日志中伞插,所以它不能激活觸發(fā)器割粮。

mysql數(shù)據(jù)庫(kù)引擎MyISAM和InnoDB的區(qū)別

MyISAM InnoddDB
事務(wù)支持 不支持 支持
鎖的力度 table row
儲(chǔ)存容量 沒(méi)有上限 64TB
哈希索引 不支持 支持
全文索引 支持 不支持
外鍵 不支持 支持

MySql存儲(chǔ)引擎

MyISAM

  • 選擇密集型的表。MyISAM存儲(chǔ)引擎在篩選大量數(shù)據(jù)時(shí)非常迅速媚污,這是它最突出的優(yōu)點(diǎn)穆刻。
  • 插入密集型的表。MyISAM的并發(fā)插入特性允許同時(shí)選擇和插入數(shù)據(jù)杠步。例如:MyISAM存儲(chǔ)引擎很適合管理郵件或Web服務(wù)器日志數(shù)據(jù)氢伟。

InnoDB

1.更新密集的表榜轿。InnoDB存儲(chǔ)引擎特別適合處理多重并發(fā)的更新請(qǐng)求。
2.事務(wù)朵锣。InnoDB存儲(chǔ)引擎是支持事務(wù)的標(biāo)準(zhǔn)MySQL存儲(chǔ)引擎谬盐。
3.自動(dòng)災(zāi)難恢復(fù)。與其它存儲(chǔ)引擎不同诚些,InnoDB表能夠自動(dòng)從災(zāi)難中恢復(fù)飞傀。
4.外鍵約束。MySQL支持外鍵的存儲(chǔ)引擎只有InnoDB诬烹。
5.支持自動(dòng)增加列AUTO_INCREMENT屬性砸烦。
一般來(lái)說(shuō),如果需要事務(wù)支持绞吁,并且有較高的并發(fā)讀取頻率幢痘,InnoDB是不錯(cuò)的選擇。

MEMORY

使用MySQL Memory存儲(chǔ)引擎的出發(fā)點(diǎn)是速度家破。為得到最快的響應(yīng)時(shí)間颜说,采用的邏輯存儲(chǔ)介質(zhì)是系統(tǒng)內(nèi)存。雖然在內(nèi)存中存儲(chǔ)表數(shù)據(jù)確實(shí)會(huì)提供很高的性能汰聋,但當(dāng)mysqld守護(hù)進(jìn)程崩潰時(shí)门粪,所有的Memory數(shù)據(jù)都會(huì)丟失。獲得速度的同時(shí)也帶來(lái)了一些缺陷烹困。它要求存儲(chǔ)在Memory數(shù)據(jù)表里的數(shù)據(jù)使用的是長(zhǎng)度不變的格式玄妈,這意味著不能使用BLOB和TEXT這樣的長(zhǎng)度可變的數(shù)據(jù)類型,VARCHAR是一種長(zhǎng)度可變的類型髓梅,但因?yàn)樗贛ySQL內(nèi)部當(dāng)做長(zhǎng)度固定不變的CHAR類型拟蜻,所以可以使用。
一般在以下幾種情況下使用Memory存儲(chǔ)引擎:
1.目標(biāo)數(shù)據(jù)較小女淑,而且被非常頻繁地訪問(wèn)。在內(nèi)存中存放數(shù)據(jù)辜御,所以會(huì)造成內(nèi)存的使用鸭你,可以通過(guò)參數(shù)max_heap_table_size控制Memory表的大小,設(shè)置此參數(shù)擒权,就可以限制Memory表的最大大小袱巨。
2.如果數(shù)據(jù)是臨時(shí)的,而且要求必須立即可用碳抄,那么就可以存放在內(nèi)存表中愉老。
3.存儲(chǔ)在Memory表中的數(shù)據(jù)如果突然丟失,不會(huì)對(duì)應(yīng)用服務(wù)產(chǎn)生實(shí)質(zhì)的負(fù)面影響剖效。
Memory同時(shí)支持散列索引和B樹(shù)索引嫉入。B樹(shù)索引的優(yōu)于散列索引的是焰盗,可以使用部分查詢和通配查詢,也可以使用<咒林、>和>=等操作符方便數(shù)據(jù)挖掘熬拒。散列索引進(jìn)行“相等比較”非常快垫竞,但是對(duì)“范圍比較”的速度就慢多了澎粟,因此散列索引值適合使用在=和<>的操作符中,不適合在<或>操作符中欢瞪,也同樣不適合用在order by子句中活烙。

MERGE

MERGE存儲(chǔ)引擎是一組MyISAM表的組合,這些MyISAM表結(jié)構(gòu)必須完全相同遣鼓,盡管其使用不如其它引擎突出啸盏,但是在某些情況下非常有用。說(shuō)白了譬正,Merge表就是幾個(gè)相同MyISAM表的聚合器宫补;Merge表中并沒(méi)有數(shù)據(jù),對(duì)Merge類型的表可以進(jìn)行查詢曾我、更新粉怕、刪除操作,這些操作實(shí)際上是對(duì)內(nèi)部的MyISAM表進(jìn)行操作抒巢。Merge存儲(chǔ)引擎的使用場(chǎng)景贫贝。
對(duì)于服務(wù)器日志這種信息,一般常用的存儲(chǔ)策略是將數(shù)據(jù)分成很多表蛉谜,每個(gè)名稱與特定的時(shí)間端相關(guān)稚晚。例如:可以用12個(gè)相同的表來(lái)存儲(chǔ)服務(wù)器日志數(shù)據(jù),每個(gè)表用對(duì)應(yīng)各個(gè)月份的名字來(lái)命名型诚。當(dāng)有必要基于所有12個(gè)日志表的數(shù)據(jù)來(lái)生成報(bào)表客燕,這意味著需要編寫(xiě)并更新多表查詢,以反映這些表中的信息狰贯。與其編寫(xiě)這些可能出現(xiàn)錯(cuò)誤的查詢也搓,不如將這些表合并起來(lái)使用一條查詢,之后再刪除Merge表涵紊,而不影響原來(lái)的數(shù)據(jù)傍妒,刪除Merge表只是刪除Merge表的定義,對(duì)內(nèi)部的表沒(méi)有任何影響摸柄。

ARCHIVE

Archive是歸檔的意思颤练,在歸檔之后很多的高級(jí)功能就不再支持了,僅僅支持最基本的插入和查詢兩種功能驱负。在MySQL 5.5版以前嗦玖,Archive是不支持索引患雇,但是在MySQL 5.5以后的版本中就開(kāi)始支持索引了。Archive擁有很好的壓縮機(jī)制踏揣,它使用zlib壓縮庫(kù)庆亡,在記錄被請(qǐng)求時(shí)會(huì)實(shí)時(shí)壓縮,所以它經(jīng)常被用來(lái)當(dāng)做倉(cāng)庫(kù)使用捞稿。

如何選擇合適的存儲(chǔ)引擎又谋?

(1)選擇標(biāo)準(zhǔn)可以分為:
(2)是否需要支持事務(wù);
(3)是否需要使用熱備娱局;
(4)崩潰恢復(fù):能否接受崩潰彰亥;
(5)是否需要外鍵支持;
然后按照標(biāo)準(zhǔn)衰齐,選擇對(duì)應(yīng)的存儲(chǔ)引擎即可任斋。

索引

索引的優(yōu)點(diǎn)

第一,通過(guò)創(chuàng)建唯一性索引耻涛,可以保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性废酷。

第二,可以大大加快數(shù)據(jù)的檢索速度抹缕,這也是創(chuàng)建索引的最主要的原因澈蟆。

第三,可以加速表和表之間的連接卓研,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義趴俘。

第四,在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí)奏赘,同樣可以顯著減少查詢中分組和排序的時(shí)間寥闪。

第五,通過(guò)使用索引磨淌,可以在查詢的過(guò)程中疲憋,使用優(yōu)化隱藏器,提高系統(tǒng)的性能梁只。

索引的缺點(diǎn)

第一缚柳,創(chuàng)建索引和維護(hù)索引要耗費(fèi)時(shí)間,這種時(shí)間隨著數(shù)據(jù)量的增加而增加敛纲。

第二喂击,索引需要占物理空間剂癌,除了數(shù)據(jù)表占數(shù)據(jù)空間之外淤翔,每一個(gè)索引還要占一定的物理空間,如果要建立聚簇索引佩谷,那么需要的空間就會(huì)更大旁壮。

第三监嗜,當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候抡谐,索引也要?jiǎng)討B(tài)的維護(hù)裁奇,這樣就降低了數(shù)據(jù)的維護(hù)速度。

不應(yīng)該創(chuàng)建索引的的這些列具有下列特點(diǎn):

第一麦撵,對(duì)于那些在查詢中很少使用或者參考的列不應(yīng)該創(chuàng)建索引刽肠。這是因?yàn)椋热贿@些列很少使用到免胃,因此有索引或者無(wú)索引音五,并不能提高查詢速度。相反羔沙,由于增加了索引躺涝,反而降低了系統(tǒng)的維護(hù)速度和增大了空間需求。

第二扼雏,對(duì)于那些只有很少數(shù)據(jù)值的列也不應(yīng)該增加索引坚嗜。這是因?yàn)椋捎谶@些列的取值很少诗充,例如人事表的性別列苍蔬,在查詢的結(jié)果中,結(jié)果集的數(shù)據(jù)行占了表中數(shù)據(jù)行的很大比例其障,即需要在表中搜索的數(shù)據(jù)行的比例很大银室。增加索引,并不能明顯加快檢索速度励翼。

第三蜈敢,對(duì)于那些定義為text, image和bit數(shù)據(jù)類型的列不應(yīng)該增加索引。這是因?yàn)槠В@些列的數(shù)據(jù)量要么相當(dāng)大抓狭,要么取值很少。

第四造烁,當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時(shí)否过,不應(yīng)該創(chuàng)建索引。這是因?yàn)椴洋薷男阅芎蜋z索性能是互相矛盾的苗桂。當(dāng)增加索引時(shí),會(huì)提高檢索性能告组,但是會(huì)降低修改性能煤伟。當(dāng)減少索引時(shí),會(huì)提高修改性能,降低檢索性能便锨。因此围辙,當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時(shí),不應(yīng)該創(chuàng)建索引放案。

數(shù)據(jù)庫(kù)范式

第一范式數(shù)據(jù)庫(kù)表中的字段都是單一屬性的姚建,不可再分(就是無(wú)重復(fù)的列)
第二范式就是非主屬性非部分依賴于主關(guān)鍵字(不存在非關(guān)鍵字段 對(duì)任一候選關(guān)鍵字段 的部分 函數(shù)依賴)。
第三范式就是屬性不依賴于其它非主屬性吱殉。

數(shù)據(jù)庫(kù)優(yōu)化的思路

SQL語(yǔ)句優(yōu)化

1)應(yīng)盡量避免在 where 子句中使用!=或<>操作符掸冤,否則將引擎放棄使用索引而進(jìn)行全表掃描。
2)應(yīng)盡量避免在 where 子句中對(duì)字段進(jìn)行 null 值判斷友雳,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描贩虾,如:
select id from t where num is null
可以在num上設(shè)置默認(rèn)值0,確保表中num列沒(méi)有null值沥阱,然后這樣查詢:
select id from t where num=0
3)很多時(shí)候用 exists 代替 in 是一個(gè)好的選擇
4)用Where子句替換HAVING 子句 因?yàn)镠AVING 只會(huì)在檢索出所有記錄之后才對(duì)結(jié)果集進(jìn)行過(guò)濾

索引優(yōu)化

對(duì)頻繁查詢的數(shù)據(jù)字段創(chuàng)建索引

.數(shù)據(jù)庫(kù)結(jié)構(gòu)優(yōu)化

1)范式優(yōu)化: 比如消除冗余(節(jié)省空間缎罢。。)
2)反范式優(yōu)化:比如適當(dāng)加冗余等(減少join)
3)拆分表: 分區(qū)將數(shù)據(jù)在物理上分隔開(kāi)考杉,不同分區(qū)的數(shù)據(jù)可以制定保存在處于不同磁盤(pán)上的數(shù)據(jù)文件里策精。這樣,當(dāng)對(duì)這個(gè)表進(jìn)行查詢時(shí)崇棠,只需要在表分區(qū)中進(jìn)行掃描咽袜,而不必進(jìn)行全表掃描,明顯縮短了查詢時(shí)間枕稀,另外處于不同磁盤(pán)的分區(qū)也將對(duì)這個(gè)表的數(shù)據(jù)傳輸分散在不同的磁盤(pán)I/O询刹,一個(gè)精心設(shè)置的分區(qū)可以將數(shù)據(jù)傳輸對(duì)磁盤(pán)I/O競(jìng)爭(zhēng)均勻地分散開(kāi)。對(duì)數(shù)據(jù)量大的時(shí)時(shí)表可采取此方法萎坷“剂可按月自動(dòng)建表分區(qū)。
4)拆分其實(shí)又分垂直拆分和水平拆分: 案例: 簡(jiǎn)單購(gòu)物系統(tǒng)暫設(shè)涉及如下表: 1.產(chǎn)品表(數(shù)據(jù)量10w哆档,穩(wěn)定) 2.訂單表(數(shù)據(jù)量200w蔽挠,且有增長(zhǎng)趨勢(shì)) 3.用戶表 (數(shù)據(jù)量100w,且有增長(zhǎng)趨勢(shì)) 以mysql為例講述下水平拆分和垂直拆分瓜浸,mysql能容忍的數(shù)量級(jí)在百萬(wàn)靜態(tài)數(shù)據(jù)可以到千萬(wàn) 垂直拆分:解決問(wèn)題:表與表之間的io競(jìng)爭(zhēng) 不解決問(wèn)題:?jiǎn)伪碇袛?shù)據(jù)量增長(zhǎng)出現(xiàn)的壓力 方案: 把產(chǎn)品表和用戶表放到一個(gè)server上 訂單表單獨(dú)放到一個(gè)server上 水平拆分: 解決問(wèn)題:?jiǎn)伪碇袛?shù)據(jù)量增長(zhǎng)出現(xiàn)的壓力 不解決問(wèn)題:表與表之間的io爭(zhēng)奪
方案: 用戶表通過(guò)性別拆分為男用戶表和女用戶表 訂單表通過(guò)已完成和完成中拆分為已完成訂單和未完成訂單 產(chǎn)品表 未完成訂單放一個(gè)server上 已完成訂單表盒男用戶表放一個(gè)server上 女用戶表放一個(gè)server上(女的愛(ài)購(gòu)物 哈哈)

sql語(yǔ)句安全性

(1)防止sql注入澳淑,對(duì)特殊字符進(jìn)行轉(zhuǎn)義,過(guò)濾或者使用預(yù)編譯的sql語(yǔ)句綁定變量插佛。
(2)最小權(quán)限原則杠巡,特別是不要用root賬戶,為不同的類型的動(dòng)作或者組建使用不同的賬戶雇寇。
(3)當(dāng)sql運(yùn)行出錯(cuò)時(shí)氢拥,不要把數(shù)據(jù)庫(kù)返回的錯(cuò)誤信息全部顯示給用戶绑改,以防止泄漏服務(wù)器和數(shù)據(jù)庫(kù)相關(guān)信息。

面試問(wèn)題

一張表,里面有ID自增主鍵,當(dāng)insert了17條記錄之后,刪除了第15,16,17條記錄,再把mysql重啟,再insert一條記錄,這條記錄的ID是18還是15 兄一?

(1)如果表的類型是MyISAM,那么是18识腿。
因?yàn)镸yISAM表會(huì)把自增主鍵的最大ID記錄到數(shù)據(jù)文件里出革,重啟MySQL自增主鍵的最大ID也不會(huì)丟失。
(2)如果表的類型是InnoDB渡讼,那么是15骂束。
InnoDB表只是把自增主鍵的最大ID記錄到內(nèi)存中,所以重啟數(shù)據(jù)庫(kù)或者是對(duì)表進(jìn)行OPTIMIZE操作成箫,都會(huì)導(dǎo)致最大ID丟失展箱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蹬昌,隨后出現(xiàn)的幾起案子混驰,更是在濱河造成了極大的恐慌,老刑警劉巖皂贩,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栖榨,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡明刷,警方通過(guò)查閱死者的電腦和手機(jī)婴栽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辈末,“玉大人愚争,你說(shuō)我怎么就攤上這事〖菲福” “怎么了轰枝?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)组去。 經(jīng)常有香客問(wèn)我狸膏,道長(zhǎng),這世上最難降的妖魔是什么添怔? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任湾戳,我火速辦了婚禮,結(jié)果婚禮上广料,老公的妹妹穿的比我還像新娘砾脑。我一直安慰自己,他們只是感情好艾杏,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布韧衣。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畅铭。 梳的紋絲不亂的頭發(fā)上氏淑,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音硕噩,去河邊找鬼假残。 笑死,一個(gè)胖子當(dāng)著我的面吹牛炉擅,可吹牛的內(nèi)容都是我干的辉懒。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谍失,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼眶俩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起快鱼,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤颠印,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后抹竹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體嗽仪,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年柒莉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闻坚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡兢孝,死狀恐怖窿凤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跨蟹,我是刑警寧澤雳殊,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站窗轩,受9級(jí)特大地震影響夯秃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜痢艺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一仓洼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧堤舒,春花似錦色建、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)某残。三九已至,卻和暖如春陵吸,著一層夾襖步出監(jiān)牢的瞬間玻墅,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工壮虫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留澳厢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓旨指,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親喳整。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谆构,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

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