1润梯、列舉常見的關(guān)系型數(shù)據(jù)庫和非關(guān)系型都有那些过牙?
- 關(guān)系型數(shù)據(jù)庫:Oracle、DB2仆救、Microsoft SQL Server抒和、Microsoft Access、MySQL
- 非關(guān)系型數(shù)據(jù)庫:NoSql彤蔽、Cloudant摧莽、MongoDb、redis顿痪、HBase
兩種數(shù)據(jù)庫之間的區(qū)別:
關(guān)系型數(shù)據(jù)庫:
-
關(guān)系型數(shù)據(jù)庫的特性
1镊辕、關(guān)系型數(shù)據(jù)庫,是指采用了關(guān)系模型來組織數(shù)據(jù)的數(shù)據(jù)庫蚁袭;
2征懈、關(guān)系型數(shù)據(jù)庫的最大特點(diǎn)就是事務(wù)的一致性;
3揩悄、簡單來說卖哎,關(guān)系模型指的就是二維表格模型,而一個關(guān)系型數(shù)據(jù)庫就是由二維表及其之間的聯(lián)系所組成的一個數(shù)據(jù)組織。 -
關(guān)系型數(shù)據(jù)庫的優(yōu)點(diǎn)
1亏娜、容易理解:二維表結(jié)構(gòu)是非常貼近邏輯世界一個概念焕窝,關(guān)系模型相對網(wǎng)狀、層次等其他模型來說更容易理解维贺;
2它掂、使用方便:通用的SQL語言使得操作關(guān)系型數(shù)據(jù)庫非常方便;
3溯泣、易于維護(hù):豐富的完整性(實(shí)體完整性虐秋、參照完整性和用戶定義的完整性)大大減低了數(shù)據(jù)冗余和數(shù)據(jù)不一致的概率;
4垃沦、支持SQL客给,可用于復(fù)雜的查詢。 -
關(guān)系型數(shù)據(jù)庫的缺點(diǎn)
1栏尚、為了維護(hù)一致性所付出的巨大代價(jià)就是其讀寫性能比較差起愈;
2、固定的表結(jié)構(gòu)译仗;
3、高并發(fā)讀寫需求官觅;
4纵菌、海量數(shù)據(jù)的高效率讀寫;
非關(guān)系型數(shù)據(jù)庫
-
非關(guān)系型數(shù)據(jù)庫的特性
1休涤、使用鍵值對存儲數(shù)據(jù)咱圆;
2、分布式功氨;
3序苏、一般不支持ACID特性;
4捷凄、非關(guān)系型數(shù)據(jù)庫嚴(yán)格上不是一種數(shù)據(jù)庫忱详,應(yīng)該是一種數(shù)據(jù)結(jié)構(gòu)化存儲方法的集合。 -
非關(guān)系型數(shù)據(jù)庫的優(yōu)點(diǎn)
1跺涤、無需經(jīng)過sql層的解析匈睁,讀寫性能很高;
2桶错、基于鍵值對航唆,數(shù)據(jù)沒有耦合性,容易擴(kuò)展院刁;
3糯钙、存儲數(shù)據(jù)的格式:nosql的存儲格式是key,value形式、文檔形式、圖片形式等等任岸,文檔形式鸳玩、圖片形式等等,
而關(guān)系型數(shù)據(jù)庫則只支持基礎(chǔ)類型演闭。 -
非關(guān)系型數(shù)據(jù)庫的缺點(diǎn)
1不跟、不提供sql支持,學(xué)習(xí)和使用成本較高米碰;
2窝革、無事務(wù)處理,附加功能bi和報(bào)表等支持也不好吕座;
2虐译、MySQL常見數(shù)據(jù)庫引擎及比較?
- 常見的數(shù)據(jù)庫引擎是MyiSAM和inmoDB
- 比較:
-
MyISAM:
1吴趴、它不支持事務(wù)漆诽,也不支持外鍵,其優(yōu)勢是訪問的速度快 -
innoDB:
1锣枝、InnoDB支持事務(wù)安全厢拭,對比MyISAM引擎,InnoDB寫的效率差一些撇叁,并且會占據(jù)更多的磁盤空間供鸠。
2楞捂、MySQL支持外鍵的存儲引擎只有InnoDB
-
MyISAM:
3寨闹、簡述數(shù)據(jù)三大范式?
- 第一范式( 1NF): 字段具有原子性,不可再分帖蔓。
- 第二范式( 2NF):是在第一范式( 1NF) 的基礎(chǔ)上建立起來的塑娇,要求數(shù)據(jù)庫表中的每個實(shí)例或行必須可以被惟一地區(qū)分埋酬。通常需要為表加上一個列写妥, 以存儲各個實(shí)例的惟一標(biāo)識珍特。 這個惟一屬性列被稱為主關(guān)鍵字或主鍵扎筒。
- 第三范式( 3NF): 必須先滿足第二范式( 2NF)。 簡而言之奥溺, 第三范式( 3NF) 要求一個數(shù)據(jù)庫表中不包含已在其它表中已包含的非主關(guān)鍵字信息浮定。所以第三范式具有如下特征:1层亿, 每一列只有一個值闸盔。2, 每一行都能區(qū)分针贬。3, 每一個表都不包含其他表已經(jīng)包含的非主關(guān)鍵字信息快压。
4蔫劣、什么是事務(wù)脉幢?什么是鎖?MySQL如何支持事務(wù)嫌松?
-
事務(wù):主要用于處理操作量大沪曙,復(fù)雜度高的數(shù)據(jù)萎羔。一般來說,事務(wù)是必須滿足4個條件(ACID):
- 原子性:所謂原子操作是指不會被線程調(diào)度機(jī)制打斷的操作贾陷;這種操作一旦開始缘眶,就一直運(yùn)行到結(jié)束昵宇,中間不會有任何 context switch (切換到另一個線程)磅崭。事務(wù)在執(zhí)行過程中發(fā)生錯誤瓦哎,會被回滾(Rollback)到事務(wù)開始前的狀態(tài)砸喻,就像這個事務(wù)從來沒有執(zhí)行過一樣割岛。
- 一致性:在事務(wù)開始之前和事務(wù)結(jié)束以后剂买,數(shù)據(jù)庫的完整性沒有被破壞惠爽。這表示寫入的資料必須完全符合所有的預(yù)設(shè)規(guī)則,這包含資料的精確度坐慰、串聯(lián)性以及后續(xù)數(shù)據(jù)庫可以自發(fā)性地完成預(yù)定的工作较性。
- 隔離性:數(shù)據(jù)庫允許多個并發(fā)事務(wù)同時(shí)對其數(shù)據(jù)進(jìn)行讀寫和修改的能力,隔離性可以防止多個事務(wù)并發(fā)執(zhí)行時(shí)由于交叉執(zhí)行结胀,而導(dǎo)致數(shù)據(jù)的不一致赞咙。事務(wù)隔離分為不同級別,包括讀未提交(Read uncommitted)糟港、讀提交(read committed)攀操、可重復(fù)讀(repeatable read)和串行化(Serializable)。
- 持久性:事務(wù)處理結(jié)束后着逐,對數(shù)據(jù)的修改就是永久的崔赌,即便系統(tǒng)故障也不會丟失意蛀。
- 鎖:是實(shí)現(xiàn)事務(wù)的關(guān)鍵,所可以保證事務(wù)的完整性和并發(fā)行健芭,與現(xiàn)實(shí)生活中的鎖一樣县钥,可以使某些數(shù)據(jù)的擁有者,在某段時(shí)間內(nèi)不能使用某些數(shù)據(jù)或者數(shù)據(jù)結(jié)構(gòu)慈迈。
注意:MySQL 中只有使用了 Innodb 數(shù)據(jù)庫引擎的數(shù)據(jù)庫或表才支持事務(wù)若贮。
5、簡述數(shù)據(jù)庫設(shè)計(jì)中一對多和多對多的應(yīng)用場景痒留?
- 一對多:當(dāng)在數(shù)據(jù)庫的設(shè)計(jì)中谴麦,涉及到一個對象可以包含多個另外對象,而單個另外對象只能對應(yīng)一個對象時(shí)就產(chǎn)生了一對多的關(guān)系伸头,例學(xué)生和班級匾效,這種情況通常將外鍵設(shè)在多的對象表結(jié)構(gòu)中。
- 多對多:當(dāng)在數(shù)據(jù)庫的設(shè)計(jì)中恤磷,涉及到一個對象可以包含多個另外對象面哼,而單個另外對象也對應(yīng)多個對象時(shí)就產(chǎn)生了多對多的關(guān)系,例書籍和作者扫步,這種情況通常將外鍵設(shè)在多的對象表結(jié)構(gòu)中魔策。
6、簡述觸發(fā)器河胎、函數(shù)闯袒、視圖、存儲過程游岳?
- 觸發(fā)器:使用觸發(fā)器可以定制用戶對表進(jìn)行【增政敢、刪、改】操作時(shí)前后的行為,觸發(fā)器無法由用戶直接調(diào)用胚迫,而知由于對表的【增/刪/改】操作被動引發(fā)的
- 函數(shù):是MySQL數(shù)據(jù)庫提供的內(nèi)部函數(shù)(當(dāng)然也可以自定義函數(shù))堕仔。這些內(nèi)部函數(shù)可以幫助用戶更加方便的處理表中的數(shù)據(jù)
- 視圖:視圖是虛擬表或邏輯表,它被定義為具有連接的SQL SELECT查詢語句晌区。
- 存儲過程:存儲過程是存儲在數(shù)據(jù)庫目錄中的一坨的聲明性SQL語句,數(shù)據(jù)庫中的一個重要對象,有效提高了程序的性能
7通贞、MySQL索引種類
- 普通索引朗若、唯一索引(主鍵索引、唯一索引)昌罩、聯(lián)合索引哭懈、全文索引、空間索引
8茎用、索引在什么情況下遵循最左前綴的規(guī)則遣总?
- 在建立了聯(lián)合索引的前提條件下睬罗,數(shù)據(jù)庫會一直從左向右的順序依次查找,直到遇到了范圍查詢(>,<,between,like等)
9旭斥、主鍵和外鍵的區(qū)別容达?
- 主鍵:是指表中一個列或者列的組合,其值能夠唯一的標(biāo)識表中的每一個行垂券。這樣的一列或者多列成為表的主鍵花盐,通過它可以強(qiáng)制表的實(shí)體完整性。當(dāng)創(chuàng)建或者更改表時(shí)可以通過定義PRIMARY KEY約束來創(chuàng)建主鍵菇爪,一個表只能有一個主鍵約束算芯,而且主鍵約束中的列不能是空值,由于主鍵約束確保唯一數(shù)據(jù)凳宙,所一經(jīng)常來定義標(biāo)識列熙揍。
- 外鍵:外鍵是建立于表與表之間的聯(lián)系。外鍵保證了數(shù)據(jù)的完整性氏涩,使用外鍵届囚,簡單直觀,可以直接在數(shù)據(jù)模型中體現(xiàn)削葱,無論是設(shè)計(jì)奖亚、維護(hù)等。
10析砸、MySQL常見的函數(shù)昔字?
- 聚合函數(shù):avg,min,max,count,sum,
-
字符串處理函數(shù):
合并字符串函數(shù):concat(str1,str2,str3…)
比較字符串大小函數(shù):strcmp(str1,str2)
獲取字符串字節(jié)數(shù)函數(shù):length(str)
獲取字符串字符數(shù)函數(shù):char_length(str)
字母大小寫轉(zhuǎn)換函數(shù):大寫:upper(x),ucase(x);小寫lower(x),lcase(x) -
處理數(shù)值的函數(shù):
絕對值函數(shù):abs(x)
向上取整函數(shù):ceil(x)
向下取整函數(shù):floor(x)
取模函數(shù):mod(x,y)
隨機(jī)數(shù)函數(shù):rand()
四舍五入函數(shù):round(x,y)
數(shù)值截取函數(shù):truncate(x,y) -
用于處理時(shí)間日期的函數(shù):
獲取當(dāng)前日期:curdate()首繁,current_date()
獲取當(dāng)前時(shí)間:curtime()作郭,current_time()
獲取當(dāng)前日期時(shí)間:now()
從日期中選擇出月份數(shù):month(date),monthname(date)
從日期中選擇出周數(shù):week(date)
從日期中選擇出周數(shù):year(date)
從時(shí)間中選擇出小時(shí)數(shù):hour(time)
從時(shí)間中選擇出分鐘數(shù):minute(time)
從時(shí)間中選擇出今天是周幾:weekday(date),dayname(date)
11、列舉創(chuàng)建索引但是無法命中索引的8種情況弦疮。
- 1夹攒、查詢條件中有or、not in胁塞、not exist等
- 2咏尝、小表查詢
- 3、like查詢是以%開頭
- 4啸罢、如果列類型是字符串编检,那一定要在條件中將數(shù)據(jù)使用引號引用起來,否則不使用索引
- 5、沒有使用索引字段查詢
- 6扰才、對索引列進(jìn)行運(yùn)算允懂,需要建立函數(shù)索引
- 7、單獨(dú)引用聯(lián)合索引中的非第一位置的索引
- 8衩匣、沒有查詢條件
12蕾总、如何開啟慢日志查詢粥航?
-
參數(shù)說明:
- slow_query_log: 慢查詢開啟狀態(tài)
- slow_query_log_file:慢查詢?nèi)罩敬娣诺奈恢茫ㄟ@個目錄需要MySQL的運(yùn)行帳號的可寫權(quán)限,一般設(shè)置為MySQL的數(shù)據(jù)存放目錄)
- long_query_time:查詢超過多少秒才記錄
-
開啟慢日志查詢方法一:全局變量設(shè)置
1生百、將 slow_query_log 全局變量設(shè)置為“ON”狀態(tài)递雀。指令示例:mysql> set global slow_query_log='ON';
2、設(shè)置慢查詢?nèi)罩敬娣诺奈恢茫簃ysql> set global slow_query_log_file='/usr/local/mysql/data/slow.log';
3置侍、查詢超過1秒就記錄:mysql> set global long_query_time=1; -
開啟慢日志查詢方法二: 配置文件設(shè)置
修改配置文件my.cnf映之,在[mysqld]下的下方加入:
[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1
修改完參數(shù)后重啟數(shù)據(jù)庫服務(wù)就可以了
13、數(shù)據(jù)庫導(dǎo)入導(dǎo)出命令(結(jié)構(gòu)+數(shù)據(jù))蜡坊?
- 導(dǎo)出數(shù)據(jù)庫結(jié)構(gòu)和數(shù)據(jù):mysqldump -u用戶名 -p密碼 數(shù)據(jù)庫名> 路徑+導(dǎo)出的文件名.sql
- 導(dǎo)出數(shù)據(jù)庫所有表結(jié)構(gòu):mysqldump -u用戶名 -p密碼 -d 數(shù)據(jù)庫名>路徑+文件名.sql
- 導(dǎo)出數(shù)據(jù)表結(jié)構(gòu)和數(shù)據(jù):mysqldump -u用戶名 -p密碼 數(shù)據(jù)庫名 表名>路徑+文件名.sql
- 導(dǎo)出數(shù)據(jù)表結(jié)構(gòu):mysqldump -u用戶名 -p密碼 -d 數(shù)據(jù)庫名 表名>路徑+文件名.sql
14杠输、 數(shù)據(jù)庫優(yōu)化的思路
- 1.SQL語句優(yōu)化
1)應(yīng)盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進(jìn)行全表掃描秕衙。
2)應(yīng)盡量避免在 where 子句中對字段進(jìn)行 null 值判斷蠢甲,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描,如:select id from t where num is null
可以在num上設(shè)置默認(rèn)值0据忘,確保表中num列沒有null值**鹦牛,然后這樣查詢:
select id from t where num=0
3)很多時(shí)候用 exists 代替 in 是一個好的選擇
4)用Where子句替換HAVING 子句 因?yàn)镠AVING 只會在檢索出所有記錄之后才對結(jié)果集進(jìn)行過濾
- 2.索引優(yōu)化
合理使用:普通索引、唯一索引(主鍵索引勇吊、唯一索引)曼追、聯(lián)合索引、全文索引汉规、空間索引
- 3.數(shù)據(jù)庫結(jié)構(gòu)優(yōu)化
1)范式優(yōu)化:
比如消除冗余(節(jié)省空間礼殊。。)
2)反范式優(yōu)化:
比如適當(dāng)加冗余等(減少join)
3)拆分表:
分區(qū)將數(shù)據(jù)在物理上分隔開针史,不同分區(qū)的數(shù)據(jù)可以制定保存在處于不同磁盤上的數(shù)據(jù)文件里晶伦。這樣,當(dāng)對這個表進(jìn)行查詢時(shí)啄枕,只需要在表分區(qū)中進(jìn)行掃描婚陪,而不必進(jìn)行全表掃描,明顯縮短了查詢時(shí)間频祝,另外處于不同磁盤的分區(qū)也將對這個表的數(shù)據(jù)傳輸分散在不同的磁盤I/O泌参,一個精心設(shè)置的分區(qū)可以將數(shù)據(jù)傳輸對磁盤I/O競爭均勻地分散開。對數(shù)據(jù)量大的時(shí)時(shí)表可采取此方法常空〖吧幔可按月自動建表分區(qū)。
4)拆分其實(shí)又分垂直拆分和水平拆分:
案例: 簡單購物系統(tǒng)暫設(shè)涉及如下表:
1.產(chǎn)品表(數(shù)據(jù)量10w窟绷,穩(wěn)定)
2.訂單表(數(shù)據(jù)量200w,且有增長趨勢)
3.用戶表 (數(shù)據(jù)量100w咐柜,且有增長趨勢) 以mysql為例講述下水平拆分和垂直拆分兼蜈,mysql能容忍的數(shù)量級在百萬靜態(tài)數(shù)據(jù)可以到千萬攘残。
垂直拆分:解決問題:表與表之間的io競爭 。不解決問題:單表中數(shù)據(jù)量增長出現(xiàn)的壓力为狸。
方案: 把產(chǎn)品表和用戶表放到一個server上 訂單表單獨(dú)放到一個server上
水平拆分: 解決問題:單表中數(shù)據(jù)量增長出現(xiàn)的壓力 不解決問題:表與表之間的io爭奪歼郭。
方案: 用戶表通過性別拆分為男用戶表和女用戶表,訂單表通過已完成和完成中拆分為已完成訂單和未完成訂單辐棒, 產(chǎn)品表病曾、未完成訂單放一個server上;已完成訂單表和男用戶表放一個server上漾根;女用戶表放一個server上(女的愛購物 哈哈)
- 4.服務(wù)器硬件優(yōu)化
略
15泰涂、char和varchar的區(qū)別?
- char的長度是不可變的辐怕,而varchar的長度是可變的逼蒙。char的存取速度還是要比varchar要快得多,因?yàn)槠溟L度固定寄疏,方便程序的存儲與查找是牢;但是char也為此付出的是空間的代價(jià),因?yàn)槠溟L度固定陕截,所以難免會有多余的空格占位符占據(jù)空間驳棱,可謂是以空間換取時(shí)間效率,而varchar是以空間效率為首位的农曲。再者社搅,char的存儲方式是,對英文字符(ASCII)占用1個字節(jié)朋蔫,對一個漢字占用兩個字節(jié)罚渐;而varchar的存儲方式是,對每個英文字符占用2個字節(jié)驯妄,漢字也占用2個字節(jié)荷并。
16、簡述MySQL的執(zhí)行計(jì)劃青扔?
在工作過程中源织,有時(shí)候會對慢查詢進(jìn)行調(diào)優(yōu)。對于MySQL的SQL語句調(diào)優(yōu)微猖,MySQL本身提供了強(qiáng)大的explain關(guān)鍵字用于查詢分析執(zhí)行計(jì)劃谈息。
- 語法:從語法角度explain和describe/desc是相同的,只是一般更常用desc看表結(jié)構(gòu)凛剥,explain來看查詢計(jì)劃侠仇。
詳細(xì)了解請點(diǎn)鏈接:http://www.cnblogs.com/micrari/p/6583482.html
17、在對name做了唯一索引前提下,簡述以下區(qū)別:
- select * from tb where name = ‘Oldboy-Wupeiqi’ # 全局遍歷找所有
- select * from tb where name = ‘Oldboy-Wupeiqi’ limit 1 # 鎖定一條就結(jié)束
18逻炊、1000w條數(shù)據(jù)互亮,使用limit offset 分頁時(shí),為什么越往后翻越慢余素?如何解決豹休?
- 原因:越是向后,掃描的數(shù)據(jù)也就越多
- 解決方案:
- 1、limit限制優(yōu)化法:把limit偏移量限制低于某個數(shù)桨吊。威根。超過這個數(shù)等于沒數(shù)據(jù)
- 2、存儲本頁數(shù)據(jù)兩端的主鍵,按主鍵查找后向前或向后取多少條
19视乐、什么是索引合并洛搀?
索引合并:是把幾個索引的范圍掃描合并成一個索引。索引合并的時(shí)候炊林,會對索引進(jìn)行并集姥卢,交集或者先交集再并集操作,以便合并成一個索引渣聚。這些需要合并的索引只能是一個表的独榴。不能對多表進(jìn)行索引合并。
20奕枝、什么是覆蓋索引棺榔?
MySQL可以利用索引返回SELECT 列表中的字段昧辽。而不必根據(jù)索引再次讀取數(shù)據(jù)文件萧求。 包含所有滿足查詢需要的數(shù)據(jù)的索引成為覆蓋索引(Covering Index)稍走。也就是平時(shí)所說的不需要回表操作
21救崔、left join、right join以及inner join的區(qū)別
- left join 左關(guān)聯(lián)止潮,主表在左邊览芳,右邊為從表齿桃。如果左側(cè)的主表中沒有關(guān)聯(lián)字段激捏,會用null 填滿
- right join 右關(guān)聯(lián) 主表在右邊和letf join相反
- inner join 內(nèi)關(guān)聯(lián)只會顯示主表和從表相關(guān)聯(lián)的字段设塔,不會出現(xiàn)null
22、寫出一條Sql語句:取出表A中第31到第40記錄 (Mysql)
- select * from A limit 30, 10
23远舅、什么是數(shù)據(jù)庫約束,常見的約束有哪幾種?
數(shù)據(jù)庫約束用于保證數(shù)據(jù)庫闰蛔、表數(shù)據(jù)的完整性(正確性和一致性)⊥及兀可以通過定義約束\索引\觸發(fā)器來保證數(shù)據(jù)的完整性序六。
總體來講,約束可以分為:
主鍵約束:primary key;
外鍵約束:foreign key蚤吹;
唯一約束:unique例诀;
檢查約束:check;
空值約束:not null;
默認(rèn)值約束:default余佃;
24暮刃、從數(shù)據(jù)庫中隨機(jī)取50條數(shù)據(jù)
- select * from 表 order by rand() limit50;
25、什么是sql注入爆土?
SQL注入攻擊指的是通過構(gòu)建特殊的輸入作為參數(shù)傳入Web應(yīng)用程序,而這些輸入大都是SQL語法里的一些組合诸蚕,通過執(zhí)行SQL語句進(jìn)而執(zhí)行攻擊者所要的操作步势,其主要原因是程序沒有細(xì)致地過濾用戶輸入的數(shù)據(jù),致使非法數(shù)據(jù)侵入系統(tǒng)背犯。
26坏瘩、關(guān)于sql語句應(yīng)該考慮哪些安全性?
1.防止sql注入漠魏,對特殊字符進(jìn)行轉(zhuǎn)義倔矾,過濾或者使用預(yù)編譯的sql語句綁定變量。
2.最小權(quán)限原則柱锹,特別是不要用root賬戶哪自,為不同的類型的動作或者組建使用不同的賬戶。
3.當(dāng)sql運(yùn)行出錯時(shí)禁熏,不要把數(shù)據(jù)庫返回的錯誤信息全部顯示給用戶壤巷,以防止泄漏服務(wù)器和數(shù)據(jù)庫相關(guān)信息。
27瞧毙、一張表,里面有ID自增主鍵,當(dāng)insert了17條記錄之后,刪除了第15,16,17條記錄,再把Mysql重啟,再insert一條記錄,這條記錄的ID是18還是15 胧华?
- 如果表的類型是MyISAM,那么是18宙彪。
因?yàn)镸yISAM表會把自增主鍵的最大ID記錄到數(shù)據(jù)文件里矩动,重啟MySQL自增主鍵的最大ID也不會丟失。 - 如果表的類型是InnoDB释漆,那么是15悲没。
InnoDB表只是把自增主鍵的最大ID記錄到內(nèi)存中,所以重啟數(shù)據(jù)庫或者是對表進(jìn)行OPTIMIZE操作灵汪,都會導(dǎo)致最大ID丟失檀训。
28、怎么把這樣一個數(shù)據(jù)庫表
year month amount
1991 1 1.1
1991 2 1.2
1991 3 1.3
1991 4 1.4
1992 1 2.1
1992 2 2.2
1992 3 2.3
1992 4 2.4
查成這樣一個結(jié)果
year m1 m2 m3 m4
1991 1.1 1.2 1.3 1.4
1992 2.1 2.2 2.3 2.4
答案享言、
select year,
(select amount from aaa m where month=1 and m.year=aaa.year) as m1,
(select amount from aaa m where month=2 and m.year=aaa.year) as m2,
(select amount from aaa m where month=3 and m.year=aaa.year) as m3,
(select amount from aaa m where month=4 and m.year=aaa.year) as m4
from aaa group by year
29峻凫、簡述數(shù)據(jù)庫的讀寫分離?
- 讀寫分離為了確保數(shù)據(jù)庫產(chǎn)品的穩(wěn)數(shù)據(jù)定性览露,很多數(shù)據(jù)庫擁有雙機(jī)熱備功能荧琼。也就是,第一臺數(shù)據(jù)庫服務(wù)器,是對外提供增刪改業(yè)務(wù)的生產(chǎn)服務(wù)器命锄;第二臺數(shù)據(jù)庫服務(wù)器堰乔,主要進(jìn)行讀的操作。
30脐恩、簡述數(shù)據(jù)庫分庫分表镐侯?(水平、垂直)
- 垂直分庫:就是按照功能的不同驶冒,把沒有關(guān)聯(lián)的數(shù)據(jù)放到不同的數(shù)據(jù)庫和服務(wù)器中
- 水平分表:根據(jù)一定的規(guī)則將一個表的數(shù)據(jù)劃分到不同的數(shù)據(jù)庫中苟翻,兩個數(shù)據(jù)庫的表結(jié)構(gòu)一樣。